求得小于等于N的最大升序数字(模拟题)
原创
©著作权归作者所有:来自51CTO博客作者wx596330ff6d68f的原创作品,请联系作者获取转载授权,否则将追究法律责任
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:
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;
}
};