1. 程式人生 > 其它 >738 單調遞增的數字

738 單調遞增的數字

技術標籤:LeetCode

題目描述:
給定一個非負整數 N,找出小於或等於 N 的最大的整數,同時這個整數需要滿足其各個位數上的數字是單調遞增。
(當且僅當每個相鄰位數上的數字 x 和 y 滿足 x <= y 時,我們稱這個整數是單調遞增的。)

示例 1:
輸入: N = 10
輸出: 9

示例 2:
輸入: N = 1234
輸出: 1234

示例 3:
輸入: N = 332
輸出: 299
說明: N 是在 [0, 10^9] 範圍內的一個整數。

方法1:
主要思路:解題彙總連結
(1)每次先將當前數字轉成對應第字串,方便判斷;
(2)對字串從後向前遍歷,判斷是否滿足遞增,若滿足,直接返回該值;

(3)若不滿足,則此時找到了不滿足的位置,此時可以從該位置開始,向前找到第一個不為‘0’的位置,以實現借位操作,將該找到位置元素減1,並將該位置之後的所有位置都重置為‘9’;
(4)將更新後的字串重新轉成對應的整數進行判斷;

class Solution {
public:
    int monotoneIncreasingDigits(int N) {
        while(true){
            string str=to_string(N);//將當前整數轉成對應的字串
            int i=str.size()-2;
            for(;i>=
0;--i){//從後向前遍歷,判斷是否是遞增的 if(str[i]>str[i+1]){ break; } } if(i==-1){//若全部遍歷,說明是,返回當前值 return N; } while(str[i]=='0'){//找到前面的第一個不為 ‘0’的字元,實現借位操作 ++i; } for
(int pos=i+1;pos<str.size();++pos){//將後面的位都重置為字元‘9’ str[pos]='9'; } str[i]=str[i]-1;//借位 N=stoi(str);//更新N } return 9; } };