0
点赞
收藏
分享

微信扫一扫

20220323-738.单调递增的数字

大自然在召唤 2022-03-23 阅读 56

链接:

738. 单调递增的数字 - 力扣(LeetCode) (leetcode-cn.com)

class Solution {
    public int monotoneIncreasingDigits(int n) {
        int idx = -1;
        //首先将数字转换成String字符串,再将其转成字符数组
        char[] strNum = String.valueOf(n).toCharArray();
        for(int i=strNum.length-1;i>0;i--){
            if(strNum[i]<strNum[i-1]){
                strNum[i-1]=(char)(strNum[i-1]-1); // int--->char需要强制类型转换
                idx=i;
            }
        }
        
       if(idx!=-1){
            for(int i=idx;i<strNum.length;i++){
                strNum[i]='9'; //需要找到最大的递增数字
            }
        }else{
            return n; //类似于1234本身就是递增的情况
        }
        StringBuilder result=new StringBuilder();
        for(int i=0;i<strNum.length;i++){
            result.append(strNum[i]);
        }
        return Integer.valueOf(result.toString());
    }
}

思路:

  • 1)如果为单调递增的数字,即该数字从左到右看应该是递增序列。将n的每一个数字存放在数组中,从右向左遍历数字,找到第一次出现递减时的位置curIdx(当前位置上的数字小于前一个位置上的数字) , curIdx-1位置上的数字减1,该位置上的数字变为9
  • 2)一开始想的是从左到右进行遍历,curIdx-1位置上的数字减1之后和它的上一个位置的数字就不符合要求了。如332--->329,这样操作之后,不符合题意
  • 3)从右向左遍历呢?332--->329--->299,倒着遍历可以,因为它可以用到已经更改数字的信息

参考:

代码随想录 (programmercarl.com)

举报

相关推荐

0 条评论