每日一题:力扣670. 最大交换

知识浅谈 知识浅谈 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区

题意

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

示例 1 :

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

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

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

题解

class Solution {
       public int maximumSwap(int num) {
        char[] chs = (num+"").toCharArray();
        char max1 = chs[0];
        int len=chs.length;
        Character[] tmp = new Character[len];
        for(int i=0;i<len;i++) tmp[i] = chs[i];
        Arrays.sort(tmp,new Comparator<Character>(){
            public int compare(Character c1,Character c2){
                return c2-c1;
            }
        });
        int l,r;
        for(int i=0;i<len;i++){
            if(tmp[i]==chs[i]) continue;
            else{
                l=i;
                r=len-1;
                while(l<r){
                    if(chs[r]==tmp[i]) break;
                    r--;
                }
                char t= chs[i];
                chs[i] = chs[r];
                chs[r] = t;
                break;
            }
        }
        return Integer.parseInt(String.valueOf(chs));
    }
}

img

...全文

相关推荐

评论
收藏 已收藏
分享
返回顶部
知识浅谈
知识浅谈 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
知识浅谈(万道面试题) 19,927 成员 99 内容