738. Monotone Increasing Digits
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]
.
// Greedy
int monotoneIncreasingDigits(int N) { // time: O(n); space: O(n)
string str = to_string(N);
int n = str.length(), pos = n;
for (int i = n - 1; i >= 0; --i) {
if (str[i - 1] <= str[i]) continue;
pos = i;
--str[i - 1];
}
for (int j = pos; j < n; ++j) {
str[j] = '9';
}
return stoi(str);
}
Last updated
Was this helpful?