欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【leetcode】38. Count and Say

程序员文章站 2022-03-23 18:45:41
...

题目:
【leetcode】38. Count and Say


思路:
读懂题目之后就比较简单了。例如题目中的那个序列,解释如下:

  1. 1(初始值)
  2. 1个1,简写为11
  3. 2个1,简写21
  4. 1个2,1个1,简写为1211
  5. 1个1,1个2,2个1,简写为111221
    ······
    发现规律没,连续相同的数会压缩成“几个几”的形式。
    我感觉逆推回去也行呢。

代码实现:

class Solution {
public:
    
    string countAndSay(int n) {
        if (n <= 0){
            return "";
        }
        
        string s = "1";
        
        for (int i = 1; i < n; ++i){
            string s2;
            int count = 1;
            char val = s[0];
            for (int j = 1; j < s.length(); ++j){
                if (s[j-1] == s[j]){
                    ++count;
                }else{
                    s2 += to_string(count);
                    s2 += val;
                    count = 1;
                    val = s[j];
                }
            }
            s2 += to_string(count);
            s2 += val;
            s = s2;
        }
        
        return s;
    }
};

拓展:

不管打印到后面多少位,出现的数字只是由 1, 2 和3 组成。
参考:https://www.cnblogs.com/grandyang/p/4086299.html