java算法--随意交换数字得到最大值

226 阅读1分钟

题目

给定一个非负整数,你至多可以交换一次数字中的任意两位。返回你能得到的最大值

代码实现

        char[] s = String.valueOf(num).toCharArray();
        for(int i=0;i<s.length-1;i++){
            int maxIndex=i+1;
            for(int j=maxIndex+1;j<s.length;j++){
                if(s[j]>=s[maxIndex])
                    maxIndex=j;
            }
            if(s[maxIndex]>s[i]){
                char temp=s[i];
                s[i]=s[maxIndex];
                s[maxIndex]=temp;
                break;
            }

        }
        return Integer.valueOf(new String(s));
    }

分析

1.首先将输入的整数转换为字符串,并将字符串转换为字符数组"char[] s"。然后,使用两个嵌套的循环遍历字符数组。外部循环从数组的第一个元素开始,内部循环从外部循环的下一个元素开始。

2.在内部循环中,通过比较当前字符和后续字符的大小,找到最大的字符,并记录最大字符的索引"maxIndex"。如果找到的最大字符大于当前字符,则进行交换。交换的过程是,使用一个临时变量"temp"保存当前字符的值,然后将当前字符的值更新为最大字符的值,最后将最大字符的值更新为临时变量"temp"的值。交换完成后,跳出循环。

3.将交换后的字符数组转换回字符串,并将字符串转换为整数返回,这样就能得到最大值