思路:

1. 1

2. 11

3.  21

4.  1211

5.  111221

6.   312211

7.   13112221

规律是下面一行在读取上一行数字

  1. 给一个数,这个数是1
  2. 描述上一步的数,这个数是 1 即一个1,故写作11
  3. 描述上一步的数,这个数是11即两个1,故写作21
  4. 描述上一步的数,这个数是21即一个2一个1,故写作12-11
  5. 描述上一步的数,这个数是1211即一个1一个2两个1,故写作11-12-21

代码:

class Solution {
public:
    string countAndSay(int n) {
        string s="1";
        for(int i=0;i<n-1;i++)  //循环到第几步
        {
            string ns;
            for(int j=0;j<s.size();j++) //遍历字符串长度
            {
                int k=j;
                while(k<s.size() && s[k]==s[j]) k++;   //遍历相同数字并进行累加
                ns +=to_string(k-j)+s[j];      //to_string 是将int型转换为string 类型
                j=k-1;
            }
            s=ns;
        }
        return s;
    }
};