贪心
思路:
从右向左遍历,遇到当前指针位置的值比右边指针位置的值大时:
当前值 -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)