【每日一题】670. 最大交换-2024.1.22

发布时间:2024年01月22日

题目:

670. 最大交换

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

示例 1 :

输入: 2736
输出: 7236
解释: 交换数字2和数字7。

示例 2 :

输入: 9973
输出: 9973
解释: 不需要交换。

注意:

  1. 给定数字的范围是?[0, 108]

解答:

将num转化为字符数组,然后进行遍历。外循环从i=0开始,内层循环从j=i+1开始,内层循环找到最大的数字并记录其位置,然后判单i位置的数字是否小于内层循环的最大数字,如果小于则交换并退出循环,否则继续进行遍历直到完成一次交换。

注:if(max<=c)这里一定要加等于符号,因为要使交换后的最大,所以我们找到的最大数字尽可以越远越好。

代码:

class Solution {
    public int maximumSwap(int num) {
        String s=Integer.toString(num);
        char[] chars = s.toCharArray();
        int location=0;
        for(int i=0;i<s.length();i++){
            char max='0';
            for(int j=i+1;j<s.length();j++){
                char c=chars[j];
                if(max<=c){
                    max=c;
                    location=j;
                }
            }
            if(chars[i]<max){
                char temp=chars[i];
                chars[i]=max;
                chars[location]=temp;
                break;
            }
        }
        return Integer.valueOf(new String(chars));       
    }
}

结果:

文章来源:https://blog.csdn.net/weixin_45142381/article/details/135741219
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。