美文网首页
38. Count and Say

38. Count and Say

作者: RobotBerry | 来源:发表于2017-05-10 16:11 被阅读0次

    问题

    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.

    例子

    5
    111221

    分析

    统计字符串的连续重复字符

    要点

    尽量迭代,不用递归

    时间复杂度

    O(n^2) n次迭代,每次迭代的结果字符串的长度呈线性增长。

    空间复杂度

    O(1)

    代码

    class Solution {
    public:
        string countAndSay(int n) {
            string res("1");
            for (int i = 0; i < n - 1; i++)
                res = say(res);
            return res;
        }
        
    private:
        string say(const string &str) {
            string res;
            char c = str[0];
            int cnt = 1;
            for (int i = 1; i < str.size(); i++) {
                if (str[i] == c) cnt++;
                else {
                    res += to_string(cnt) + string(1, c);
                    c = str[i];
                    cnt = 1;
                }
            }
            res += to_string(cnt) + string(1, c);
            return res;
        }
    };
    

    相关文章

      网友评论

          本文标题:38. Count and Say

          本文链接:https://www.haomeiwen.com/subject/xhjgtxtx.html