力扣738题(单调递增的数组)

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));
    }
}
原文地址:https://www.cnblogs.com/zhaojiayu/p/15455810.html