力扣算法数学类—最大交换

目录

最大交换

题解:

代码:


最大交换

670. 最大交换 - 力扣(LeetCode)

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

示例 1 :

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

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

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

题解:

选择排序的思想

(51条消息) 选择排序(超详细)_@烟雨倾城ゝ的博客-CSDN博客

代码:

class Solution {
    public int maximumSwap(int num) {
        if (num % 10 == num) return num;

        char[] arr = String.valueOf(num).toCharArray();
        for (int i = 0; i < arr.length; i++) {
            // 从i后面选择一个最大的,这个最大的离i越远越好,比如1993,1交换第二个9更优,所以j倒序遍历
            int maxIndex = i;
            for (int j = arr.length - 1; j >= i + 1; j--) {
                if (arr[j] > arr[maxIndex]) {
                    maxIndex = j;
                }
            }
            if (maxIndex != i) {
                char tmp = arr[i];
                arr[i] = arr[maxIndex];
                arr[maxIndex] = tmp;
                return Integer.parseInt(new String(arr));
            }
        }

        return num;
    }
}

力扣算法数学类—最大交换_第1张图片

 

你可能感兴趣的:(题解,算法,leetcode,职场和发展)