738 單調遞增的數字
阿新 • • 發佈:2020-12-16
技術標籤: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)對字串從後向前遍歷,判斷是否滿足遞增,若滿足,直接返回該值;
(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;
}
};