题目:
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]
.
解读:给一个非负整数,找出不大于这个数的最大的数,使之各个位的数字从高位到地位呈单调递增。
思路:第一种是最差的办法:从这个数本身开始进行判断,若不符合则减一继续;
第二种,即本次的解题思路:从最低位开始,和前面一位数字作比较,如果大于前一位的数字,则前一位数字减一,后面的全替换为9.
循环到最高位,返回。
代码:
class Solution {
public:
int monotoneIncreasingDigits(int N) {
stringstream ss;
ss << N;
string s = ss.str();
int length = s.length();
for(int i = length-1; i > 0; i--){
if(s[i] < s[i-1]) {
s[i-1] = s[i-1] - 1;
for(int j = i; j < length; j++) {
s[j] = '9';
}
}
}
int result = N;
stringstream ss1;
ss1 << s;
ss1 >> result;
return result;
}
};