738. 單調遞增的數字

題目
難度:中等
類型:貪心
題意:遇到逆序,就將當前位減1,同時將後面的數全部置爲9。循環判斷檢查前面是否產生了逆序。

class Solution {
public:
    int monotoneIncreasingDigits(int N) {
        if(N < 10) return N;
        deque<int> num;
        //將數字轉換位數組形式
        do{
            num.push_front(N%10);
            N /= 10;
        }while(N);
        //遇到逆序就將前一位數值減一,同時將後面的數字全置爲9
        for(int i = 0; i < num.size()-1; i++){
            if(num[i] > num[i+1]){
                num[i]--;
                for(int j = i+1; j < num.size(); j++) num[j] = 9;
                i = -1; //進入for循環後變爲0 繼續執行 因爲332 這種情況 這次操作以後
                //變爲329 導致3和2逆序了 所以還要繼續循環
            }
        }
        int res = 0;
        for(int i = 0; i < num.size(); i++) res = res*10 + num[i];
        return res;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章