虽然通过了,感觉很怪异
mark一下。继续寻找优化解
char* countAndSay(int n) {
if (n < 0) return NULL;
char * ans = (char *)malloc(sizeof(char)*1000000);//ans最长是2的n次方,懒得用C语言求幂函数
ans[0]='1';
int begin = 0; //开始 包含begin
int end = 1; //结束 不包含end
int new_begin = end;
int new_end = new_begin;
int now ;//当前的字符
int now_num = 1;//当前字符计数
for(int i = 1; i != n; ++i)
{
now = ans[begin];
for(int j = begin + 1; j != end; ++j)
{
if(ans[j]==now)
{
now_num++;
}
else
{
ans[new_end++]=now_num+'0';
ans[new_end++]=now;
now = ans[j];
now_num = 1;
}
}
if(ans[end-1] == now)
{
ans[new_end++]=now_num+'0';
ans[new_end++]=now;
now_num = 1;
}
begin = new_begin;
end = new_end ;
new_begin = new_end;
}
ans[end]='\0';
return ans+begin;
}
时间复杂度O(n2) 这个不会算
空间复杂度O(n2)