题目描述
第一项存入一个字符‘1’,那么你就从第二项开始描述前一项的字符,例如:第一项‘1’,那么第二项就为‘11’表示‘1个1’,第三项为‘21’表示‘2个1’
题目链接
解题思路:那么我们就可以统计相同数字出现的次数,比如前一项有这样一串字符‘1113334’,那么我们就可以统计 1 出现的次数为 3 ,3 出现的次数 3 ,4 出现的次数 1 ,所以下一项就为‘3 1 3 3 1 4’,大概就是每一个字符出现的次数 + 字符
代码如下
char* countAndSay(int n) {
char * str = (char *)malloc(sizeof(char) * 1000000);
char tempChar[1000000];
str[0] = '1';
int k = 0;
for(int i = 1;i < n;i++)
{
for(int j = 0,count = 1;j < strlen(str);j++, count = 1)
{
while(str[j] == str[j+1]) //统计字符出现次数
{
count++;
j++;
}
tempChar[k++] = count + '0'; //分别将字符次数和字符存入一个临时字符数组
tempChar[k++] = str[j];
}
tempChar[k] = '\0'; //记得在最后加上结尾符
strcpy(str, tempChar);
k = 0; //重置临时字符数组下标
}
return str;
}