1. 程式人生 > >C++/38.整數遞增序列報數

C++/38.整數遞增序列報數

先上題目


思路:這道題重點在於正確讀懂題目,最簡單理解是,給一個數,輸出一個字串。給的數是整數序列,這點很關鍵,序列!!!即第幾個數。分析示例的時候,其實就是說1->11,11->21,21->1211,1211->111221,這相當於一個演變過程,假設我要求第五個,就要從第一個開始演變到序列5。

        不說廢話了,下面程式碼思路就是:用一個while()控制演變次數(序列N相對應

N-1次),for()對前一次結果字串進行逐個字元讀取,逐個字元演變。

class Solution {
public:
    string countAndSay(int n) {
        int i;
        string temp,result;
        result="1";
        while(--n){    //由原始經歷過演變的次數
            temp="";
            for(i=0;i<result.length();i++){  //for迴圈為一次完整演變過程
                int count=1;
               while(result[i]==result[i+1]){
                count++;
                i++;
                }
                temp+=to_string(count)+result[i];   
            }
            result=temp;
        }
    return result;
    }
};
    說點丟人的話,這道題我做得非常差。我一開始先是掉入了整數序列的坑,一直在分析整數序列的值與每個結果字串的關係,後面重新閱讀題目才反應過來可以從第一個變換到想要的序列結果。後面做演變的時候沒有在while()裡面初始化temp,在外面初始化了temp,導致前面的字串不斷累加,錯誤輸出。而且一開始用的是C語言,在字串連線的時候,總是溢位,沒法確定字串長度,改了C++,後續更新下C語言怎麼做。