[LeetCode No.738] 单调递增的数字

题目

题解

这道题的思路就是
1.先把数字转换为Char数组
2.从index为0开始找,找到不满足单调递增的第一个数,比如 123245 则找到index=3 若没找到则返回初始数
3.从index往前循环char[index-1]--;index-- 如其前面的数满足单调递增 则结束循环 //保证找到index后,完成char[index-1]-=1,index前面的数仍然满足单调递增,
4.将index+1到最后一个数 置为 9

代码

class Solution {
public static int monotoneIncreasingDigits(int N) {
    char[] ans = Integer.toString(N).toCharArray();
    int i = 1;

    while(i < ans.length && ans[i-1] <= ans[i]){  //此处不能互换&&条件,否则i为ans.length时,i会溢出   &&为短路与,第一个条件为False,第二个不会判断
        i++;
    }
    if (i < ans.length){       //判断是否给定初始数就是单调递增数
        while (i > 0 && ans[i] < ans[i-1]){              //不要忘记i>0 否则i==0时,i-1溢出
            ans[i-1]--;                //此处只能ans[i-1]--或者ans[i-1]-=1  此处包含自动类型转换   若ans[i-1]=ans[i-1]-1则报错,因为有赋值操作,且无自动类型转换
            i--;
        }
        for(i=i+1;i<ans.length;i++){
            ans[i] = '9';
        }
    }

    return Integer.parseInt(new String(ans));
    }
}
posted @ 2020-12-17 23:43  饼先生  阅读(81)  评论(0编辑  收藏  举报