初看的时候还理解错了,以为每一个1都要用11来代替,那第二个11就可以无限循环了。。。后来提交代码后才发现原来是数连续出现数字的个数。很明显的递归逻辑,但用C我只能先malloc一个大内存的char*,再一个循环一次次往里strcpy。
如下:
char *recuseCAS(char *str, char *result)
{
int index = 1, resucur = 1;
for (int i = 0; i < strlen(str); i++) {
while (str[i] == str[i + 1]) {
index++;
i++;
}
result[(resucur - 1) * 2] = index + '0';
result[(resucur - 1) * 2 + 1] = str[i];
index = 1;
resucur++;
}
return result;
}
char *countAndSay(int n) {
if (n == 1)
return "1";
char *result = (char *)malloc(10240 * sizeof(char));
char *str = (char *)malloc(10240 * sizeof(char));
//memset(str, 0 ,9999);
memset(result, 0, 10240);
//strcpy(str, "1");
str[0] = '1';
while (n - 1 > 0) {
result = recuseCAS(str, result);
strcpy(str, result);
n--;
}
free(str);
return result;
}