原题链接 easy
The count-and-say sequence is the sequence of integers with the first five terms as following:
1. 1 2. 11 3. 21 4. 1211 5. 111221
1
is read off as"one 1"
or11
.11
is read off as"two 1s"
or21
.21
is read off as"one 2
, thenone 1"
or1211
.Given an integer n, generate the nth term of the count-and-say sequence.
Note: Each term of the sequence of integers will be represented as a string.
Example 1:
Input: 1 Output: "1"
Example 2:
Input: 4 Output: "1211"
先解释一下题目,题意有点不清:
n=1时, 数为1
n》2时,开始算下一个数,规则是从左到右,先对一串相同的数字计数再报数
n=2,对1计数是1个1=》11
n=3,对11计数是2个1=》21
n=3,对21计数是1个2 1个1=》1211。
以此类推
思路:
蛮简单的就是遍历用一个count计数。两个string字符串pre、next记录前一个和后一个计数结果
class Solution {
public:
string countAndSay(int n) {
if(n == 1) return "1";
string pre = "1";
string next = "1";
char ss[12];
int i,count = 1;
int len;
for(i = 1;i < n;i++){
len = pre.size();
next = "";
for(int j = 0;j < len; j++){
if(pre[j] == pre[j+1] && (j+1) < len) count++;
else{
sprintf(ss,"%d",count);
next.append(ss);
next += pre[j];
count = 1;
}
}
pre = next;
}
return pre;
}
};