738. Monotone Increasing Digits

Medium

23541FavoriteShare

Given a non-negative integer ​​N​​​, find the largest number that is less than or equal to ​​N​​ with monotone increasing digits.

(Recall that an integer has monotone increasing digits if and only if each pair of adjacent digits ​​x​​​ and ​​y​​​ satisfy ​​x <= y​​.)

 

Example 1:

Input: N = 10
Output: 9

 

Example 2:

Input: N = 1234
Output: 1234

 

Example 3:

Input: N = 332
Output: 299

 

Note: ​​N​​​ is an integer in the range ​​[0, 10^9]​

class Solution {
public:
int monotoneIncreasingDigits(int N) {
vector<int> digits;
int tmp = N;
while(tmp){
digits.push_back(tmp % 10);
tmp = tmp / 10;
}
reverse(digits.begin(),digits.end());
int Index = 0;
for(;Index < digits.size() - 1;Index ++){
if(digits[Index] > digits[Index + 1]){
break;
}
}
if(Index == digits.size() - 1){
return N;
}
digits[Index]--;
for(int i = Index + 1;i < digits.size();i ++){
digits[i] = 9;
}
for(int i = Index - 1;i >= 0;i --){
if(digits[i] > digits[i + 1]){
digits[i + 1] = 9;
digits[i]--;
}
}
int Result = 0;
for(int i = 0;i < digits.size();i ++){
Result = Result * 10 + digits[i];
}
return Result;
}
};