The count-and-say sequence is the sequence of integers beginning as follows:
1, 11, 21, 1211, 111221, …
1 is read off as “one 1” or 11.
11 is read off as “two 1s” or 21.
21 is read off as “one 2, then one 1” or 1211.
Given an integer n, generate the nth sequence.
Note: The sequence of integers will be represented as a string.
说明:由于第n个序列的值依赖第n-1个序列的值,故用递归来解题。
代码:
char* countAndSay(int n) {
if(n == 1 || n == 0)
{
char *tmp = "1";
return tmp;
}
char *p = countAndSay(n-1);
char *temp = (char *)malloc(10000*n+1); //存储第n个序列的值,由于无法知道第n个序列的值得长度,故分配得很大
int count = 1, i = 0;
while(*p != '\0')
{
while(*p == *(p+1))
{
count += 1;
p++;
}
temp[i++] = count + '0';
temp[i++] = *p++;
count = 1;
}
temp[i] = '\0';
return temp;
}