题目:
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; } };