738. 单调递增的数字
给定一个非负整数 N,找出小于或等于 N 的最大的整数,同时这个整数需要满足其各个位数上的数字是单调递增。
(当且仅当每个相邻位数上的数字 x 和 y 满足 x <= y 时,我们称这个整数是单调递增的。)
解题思路: 从右往左遍历,找到最后一个(靠左)的递减点,然后将这个递减点及其之后的点全部置为9,即可。
class Solution {
public:
int monotoneIncreasingDigits(int N) {
string s = to_string(N);
int n = s.size(), j = n;
for (int i = n - 1; i >= 1; --i) {
if (s[i] >= s[i - 1]) continue;
--s[i - 1];
j = i;
}
for (int i = j; i < n; ++i) s[i] = '9';
return stoi(s);
}
};