lintcode 報數

報數 

報數指的是,按照其中的整數的順序進行報數,然後得到下一個數。如下所示:

1, 11, 21, 1211, 111221, ...

1 讀作 "one 1" -> 11.

11 讀作 "two 1s" -> 21.

21 讀作 "one 2, then one 1" -> 1211.

給定一個整數 n, 返回 第 n 個順序。

 注意事項

整數的順序將表示爲一個字符串。

您在真實的面試中是否遇到過這個題?  Yes
樣例

給定 n = 5, 返回 "111221".

分析:這道題要用到簡單的動態規劃,算出前面的一個順序才能繼續。核心算法爲判斷相鄰兩個數是否相等,如果相等就記錄下連續相等的個數,在第一次不想等處計算一次。

class Solution {
public:
    /*
     * @param n: the nth
     * @return: the nth sequence
     */
    string countAndSay(int n) {
        // write your code here
        string s="1";
        if(n==1)
        return s;
        while(--n){
            string tmp="";
             int count=1;
        for(int i=1;i<s.size();i++){
            if(s[i]==s[i-1]){
                count++;
            }
            else
            {
                tmp+=to_string(count)+s[i-1];//
                //to_string int轉string;

//這裏總是加上一個數,所以最後的一個數要額外補上 count=1; } } tmp+=to_string(count)+s.back();//最後的字符串加上,back()返回string的隨後一個字符串 s=tmp; } return s; }};

点赞