738、单调递增的数组
基本思想:
贪心
具体实现:
举例:98
一旦出现strNum[i - 1] > strNum[i]的情况(非单调递增),
首先让strNum[i - 1]--
然后strNum[i]变为9(不管是啥例子,最后一位直接变成9)
这个整数就是89,即小于98的最大的单调递增整数。
从前向后遍历,遇到strNum[i - 1] > strNum[i]的情况,让strNum[i - 1]减一,但此时如果strNum[i - 1]减一了,可能又小于strNum[i - 2]。
举例:332,从前向后遍历的话,那么就把变成了329,此时2又小于了第一位的3了,真正的结果应该是299。
从后向前遍历,就可以重复利用上次比较得出的结果了,从后向前遍历332的数值变化为:332 -> 329 -> 299
代码:
class Solution { public int monotoneIncreasingDigits(int n) { String[] strings = (n + "").split(""); int start = strings.length; for (int i = strings.length - 1; i > 0; i--){ if (Integer.parseInt(strings[i]) < Integer.parseInt(strings[i - 1])) { strings[i - 1] = (Integer.parseInt(strings[i-1]) - 1) + ""; start = i; } } for (int i = start; i < strings.length; i++){ strings[i] = "9"; } return Integer.parseInt(String.join("",strings)); } }