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

738、单调递增的数组

基本思想:

贪心

具体实现:

基本数据类型转换为字符串类型:

1、将基本数据类型与空字符串(" ")连接(+)即可获得其所对应的字符串

2、调用String 类中的valueOf()方法返回相应字符串

3、使用包装类的toString()方法

int hh = 123;
String s1 = hh + "";
String s2 = String.valueOf(hh);
String s3 = Integer.toString(hh);

字符串类型转换为基本数据类型:

1、调用基本数据类型对应的包装类中的方法parseXXX(String)

2、对应包装类型的valueOf(String)

String str = "123";
int str1 = Integer.parseInt(str);
int str2 = Integer.valueOf(str);

 

举例: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));
    }
}

 

class Solution {
    public int monotoneIncreasingDigits(int n) {
        String string = n + "";
        char[] c = string.toCharArray();
        int start = c.length;
        for (int i = c.length - 1; i > 0; i--){
            if (c[i] < c[i - 1]) {
                c[i - 1]--;// 和c[i - 1] = c[i - 1] - 1不一样
                start = i;
            }
        }
        StringBuilder s = new StringBuilder();
        for (int i = 0; i < c.length; i++) {
            if (c[i] == '0' && i == 0) {
                continue;
            }
            if (i >= start) {
                s.append("9");
            } else {
                s.append(String.valueOf(c[i]));
            }
        }
        return Integer.valueOf(s.toString());
    }
}

 

posted @ 2021-10-24 21:34  最近饭吃的很多  阅读(60)  评论(0)    收藏  举报