题目:

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;
    }
};