leetcode_38 _报数

报数序列是指一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下:

1.     1
2.     11
3.     21
4.     1211
5.     111221

1 被读作  "one 1"  ("一个一") , 即 11
11 被读作 "two 1s" ("两个一"), 即 21
21 被读作 "one 2",  "one 1" ("一个二" ,  "一个一") , 即 1211

给定一个正整数 n ,输出报数序列的第 n 项。

注意:整数顺序将表示为一个字符串。

示例 1:

输入: 1
输出: "1"

示例 2:

输入: 4
输出: "1211"

题意是n=1时输出字符串1;n=2时,数上次字符串中的数值个数,因为上次字符串有1个1,所以输出11;n=3时,由于上次字符是11,有2个1,所以输出21;n=4时,由于上次字符串是21,有1个2和1个1,所以输出1211。

class Solution {
public:
    string countAndSay(int n) {
        if (n == 1) return "1";
        string output = countAndSay(n - 1), result = "";
        int index = 0;
        while (index < output.size()) 
        {
            int cursor = index, count = 0;
            while (output[cursor] == output[index] && cursor < output.size()) //看有几个重复的数
            {
                cursor++; count++;
            }
            char number = count + '0';
            result += number;
            result += output[index];
            index += count;
        }
        return result;
       
    }
};

猜你喜欢

转载自blog.csdn.net/snow_jie/article/details/80904467