5385.改变一个整数能得到的最大差值

Posted YH_Simon

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了5385.改变一个整数能得到的最大差值相关的知识,希望对你有一定的参考价值。

image-20200503185110698

解题

思路

  • 核心是分类讨论
  • 将数转成字符串,便于截取操作;同时,将数转成字符数组,便于替换
  • 根据要求,若要差值最大,需找到最小值,最大值。
  • 注意不能有前导0
  • 14ms 待优化

代码

public int maxDiff(int num) {
        String s = String.valueOf(num);
        int len= s.length();
        char[] chars = s.toCharArray();
        String s1="";
        String s2="";

        int max=0,min=0;
        if(len<=1) return 8;
        int index=0;
        //寻找最大数
        while(index<len&&s.charAt(index)==\'9\'){
            index++;
        }
        s1=s.substring(0,index);
        char c=s.charAt(index);
        for(int i=index;i<len;i++){
            if(chars[i]==c){
                chars[i]=\'9\';
            }
            s1+=chars[i];
        }
        max=Integer.parseInt(s1);
        index=0;
//        System.out.println("max:"+max);

        //寻找最小数
        chars=s.toCharArray();
        if(s.charAt(0)!=\'1\'){
            c=s.charAt(0);
            for(int i=index;i<len;i++){
                if(chars[i]==c){
                    chars[i]=\'1\';
                }
                s2+=chars[i];
            }
            min=Integer.parseInt(s2);
        }else{
            index=1;
            while(index<len&&(s.charAt(index)==\'0\'||s.charAt(index)==\'1\')){
                index++;
            }
             //例如 1000  此时index会越界 需要对index进行处理v
            index=Math.min(index,len-1);
            c=s.charAt(index);
            s2=s.substring(0,index);
            for(int i=index;i<len;i++){
                if(chars[i]==c){
                    chars[i]=\'0\';
                }
                s2+=chars[i];
            }
            min=Integer.parseInt(s2);
        }
//        System.out.println("min:"+min);
        return max-min;
    }

以上是关于5385.改变一个整数能得到的最大差值的主要内容,如果未能解决你的问题,请参考以下文章

为什么我的代码不通过?​增量元素之间的最大差值

2023-04-29:一个序列的 宽度 定义为该序列中最大元素和最小元素的差值。 给你一个整数数组 nums ,返回 nums 的所有非空 子序列 的 宽度之和 由于答案可能非常大,请返回对 109

「 每日一练,快乐水题 」2016. 增量元素之间的最大差值

「 每日一练,快乐水题 」2016. 增量元素之间的最大差值

AcWing第2次周赛——第二题(3627. 最大差值 )贪心策略

「 每日一练,快乐水题 」2016. 增量元素之间的最大差值