这是一道根据规则推导题目,要求给定序列数n,求出该序列对应的字符串。
char* countAndSay(int n)
{
if(n == 1) return "1";
char * cur = malloc(sizeof(char) * 2);
char * temp;
cur[0] = '1';
cur[1] = '\0';
int len, idx, j, count;
for(int i = 2; i <= n; i++) { //第i个产生的数
len = strlen(cur); // 本次要处理的字符串cur
temp = malloc(3 * len);
memset(temp, 0, 3 * len); //本次产生的结果暂存在temp中
count = 1;
for(idx = 1, j = 0; idx < len; idx++) {
if(cur[idx] == cur[idx - 1]) count++;
else {
temp[j++] = '0' + count;
temp[j++] = cur[idx - 1];
count = 1;
}
}
temp[j++] = '0' + count; //最后相同的字符的处理
temp[j] = cur[len - 1]; //最后相同的字符的处理
free(cur);
cur = temp; //第i次产生的字符串
}
return cur;
}