现在的位置: 首页 > 综合 > 正文

LeetCode题解:Count and Say

2018年03月31日 ⁄ 综合 ⁄ 共 940字 ⁄ 字号 评论关闭

Count and Say

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.

Note: The sequence of integers will be represented as a string.

思路:

依次扫描之前生成的字符串即可。用一个vector来保存之前的结果,便于之后计算。

题解:

class Solution {
public:
    // save previous history for accelerated calculation
    vector<string> history;
    
    Solution()
    {
        history.emplace_back(string("1"));
    }
    
    string generate_seq(const string& in)
    {
        string generated;
        char scratch[64];
        char current = in[0];
        int count = 0;
        
        auto commit = [&]()
        {
            sprintf(scratch, "%d%c", count, current);
            generated += scratch;
        };
        
        for(auto ch : in)
            if (ch != current)
            {
                // we met another character
                commit();

                count = 1;
                current = ch;
            }
            else
                ++count;
        
        commit();   // commit the last continuous char accumulation
        return generated;
    }
    
    string countAndSay(int n) 
    {
        while(n-1 >= history.size())
            // exploit the r-value reference
            history.emplace_back(generate_seq(history.back()));
            
        return history[n-1];
    }
};


抱歉!评论已关闭.