贪心
思路:
从右向左遍历,遇到当前指针位置的值比右边指针位置的值大时:
当前值 -1
, 标记为置为 i+1
循环判断依据 if (ch[i] > ch[i+1])
不能直接中断,因为需要遍历全部数组.
遍历之后,将标记位之后的数字都记为 9
既是最大值
class Solution {public int monotoneIncreasingDigits(int n) {String s = String.valueOf(n);char[] ch = s.toCharArray();int len = s.length();int start = len; // Notice this is "len" not "len - 1". Because later we'll not replace the last digit with '9'for (int i = len - 2; i >= 0; i--) {if (ch[i] > ch[i + 1]) {ch[i]--;start = i + 1;}}while(start < len) {ch[start++] = '9';}return Integer.parseInt(String.valueOf(ch));}
}
时间: O(n)
空间: O(n)