count-and-say序列是整数序列,前五个术语如下:
1. 1 2. 11 3. 21 4. 1211 5. 111221
1
作为"one 1"
或读出11
。11
作为"two 1s"
或读出21
。21
被读出"one 2
,然后one 1"
或1211
。
给定整数n,生成count-and-say序列的第n项。
注意:整数序列的每个术语将表示为一个字符串。
例1:
输入: 1 输出: “1”
例2:
输入: 4 输出: “1211”
思路
主要为计数问题
1.如果n == 1时返回“1”即可
2.判断前一个字符串的长度,根据字符串的长度,记录有几个1,几个2等等【递归】
Eg:1211
求n = 5时,已经知道了n= 4时的1211
判断str[j] == str[j + 1]
记录一共有一个1,一个2,两个1,分别放到temp里,再用拼接技术拼接起来即可
#define max 10000
char str[max + 5],trans[max + 5];
char* countAndSay(int n) {
int count = 1;
char temp[3];
strcpy(str, "1");
strcpy(trans, "");
for(int i = 2; i <= n; i++){
int l = strlen(str);
for(int j = 0; j < l; j++){
if(str[j] == str[j + 1]){
count++;
}else{
temp[0] = count + '0';
temp[1] = str[j];
temp[2] = '\0';
strcat(trans, temp);
count = 1;
}
}
strcpy(str, trans);
strcpy(trans, "");
}
return str;
}