题目:
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.
解题思路:可以用复杂度O(n^2)的方法来做,对每一个n,都递推的从1开始求string值,直到求到n为止。在求新的string值时,遍历上一个string,对其中重复出现的数字统计次数,并将次数与数字值插入到新的string中。代码:
class Solution {
public:
string countAndSay(int n) {
string s("1");
string tmp;
for(int i=2;i<=n;i++){
for(int j=0;j<s.size();j++){
int count=1;
while((j+1)<s.size()&&s[j]==s[j+1]){
count++;
j++;
}
tmp.insert(tmp.end(),count+'0');
tmp.insert(tmp.end(),s[j]);
}
s.clear();
swap(s,tmp);
}
return s;
}
};