美文网首页
670. 最大交换(难度:中等)

670. 最大交换(难度:中等)

作者: 一直流浪 | 来源:发表于2025-02-19 23:07 被阅读0次

题目链接:https://leetcode.cn/problems/maximum-swap/

题目描述:

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

示例 1 :

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

示例 2 :

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

注意:

  1. 给定数字的范围是 [0, 10^8]

解法:模拟+排序

根据题目描述,我们最多可以交换数字中的任意两位,让数字得到最大值。

那怎样的数字才算是最大的?

如果一个数字可以交换n位,那么我们得到的最大值,一定是将数字位重新由大到小排序得到的数字。

我们可以将数字的每一位拆解出来,然后由大到小进行排序。再去和原来的数字从最高位到最低位依次进行比较,找到的第一个不同的数字位(如原数字中当前位为a和最大数字当前位为b),就是我们要交换的位置,由于原数字中的当前位的下标一定是不变的,而最大数字当前位b,可能会有多个位的值都是b。

由于a 一定是小于 b 的,若想让交换后的数字尽可能的大,那么我们最好和最右边的b进行交换。

代码:

class Solution {
    public int maximumSwap(int num) {
        List<Integer> ds = new ArrayList<>();
        int t = num;

        String numStr = String.valueOf(num);

        while (t != 0) {
            ds.add(t % 10);
            t /= 10;
        }

        ds.sort((a,b) -> (b-a));

        for(int i = 0;i<ds.size();i++) {
            if(numStr.charAt(i) -'0' !=  ds.get(i)) {
                int index = numStr.lastIndexOf(String.valueOf(ds.get(i)));
                numStr = swap(numStr,i,index);
                break;
            }
        }
        return Integer.valueOf(numStr);
    }

    public String swap(String str, int i, int j) {
        char[] charArray = str.toCharArray();
        char temp = charArray[i];
        charArray[i] = charArray[j];
        charArray[j] = temp;
        return new String(charArray);
    }
}

相关文章

  • 670. 最大交换

    给定一个非负整数,你至多可以交换一次数字中的任意两位。返回你能得到的最大值。 示例 1 : 输入: 2736输出:...

  • 670. 最大交换

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

  • LeetCode-24 两两交换链表中的节点

    题目:24. 两两交换链表中的节点 难度:中等 分类:链表 解决方案:节点的交换 今天我们学习第24题两两交换链表...

  • 85.LeetCode.152. 乘积最大子序列

    标签: 数组 动态规划 难度: 中等 题目描述 我的解法 此题与LeetCode.53. 最大子序和 不同, ...

  • 2018-1-2

    今天最大的感受,就是听到一句话:上等人谈智慧,中等人谈事情,下等人谈事非。上等人付出,中等人交换,下等人索取。上等...

  • Python LeetCode-221. 最大正方形(难度-中等

    1.题目描述 在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。 示例:输入:1...

  • leetcode每日一题 python解法 3月7日

    难度:中等 题目内容: 请定义一个队列并实现函数 max_value 得到队列里的最大值,要求函数max_valu...

  • 【吕泽轩】中等难度

    下午,我来到了足球课,新的难度又要来了。 昨天,如...

  • [Leetcode]8.String to Integer (a

    题目: 难度:中等 Implement atoi which converts a string to an in...

  • 最大交换

    i从高到低遍历,尝试与右边比它最大的数当中离它最远的那个交换。

网友评论

      本文标题:670. 最大交换(难度:中等)

      本文链接:https://www.haomeiwen.com/subject/nvglortx.html