qiaoxu123
2/27/2019 - 1:54 AM

38. Count and Say

对数字数量进行计算,并据此生成新的字符串的过程

主要难点在于循环的把握,以及数字转字符串函数的使用

代码二也是同样的思路,但是通过算法进行了优化,减少了循环进行了性能提升

//Runtime: 8 ms, faster than 75.88%
//Memory Usage: 8.7 MB, less than 83.18%

class Solution {
public:
    string countAndSay(int n) {
        if(n == 0) return "";
        string res = "1";
        while(--n){
            string cur = "";
            for(int i = 0;i < res.size();i++){
                int count = 1;
                while((i + 1 < res.size()) && (res[i] == res[i + 1])){
                    count++;
                    i++;
                }
                cur += to_string(count) + res[i];
            }
            res = cur;
        }
        return res;
    }
};
//Runtime: 4 ms, faster than 100.00%
//Memory Usage: 8.6 MB, less than 95.80%

class Solution {
public:
    string countAndSay(int n) {
        string res = "1",cur = "1";
        while(--n){
            char ch = res[0];
            int count = 0;
            cur = "";
            for(int i = 0;i < res.size();i++){
                if(ch == res[i])
                    count++;
                else{
                    cur += count + '0';
                    cur += ch;
                    ch = res[i];
                    count = 1;
                }
            }
            cur += count + '0';
            cur += ch;
            res = cur;
        }
        return res;
    }
};