LeetCode.670. 最大交换

题目

题目链接

分析

这道题的意思是我们只能交换一次,需要得到最大的数字。

我们的第一个想法就是要这个数字先变成一个数组,便于我们操作。
然后把数组最大的数放到第一个位置,如果最大的数字已经在第一个位置,那么就把次大的数放到第二个位置,依次递推…

如果数字为 nums =52767,我们肯定是要把最后一个7放到第一个位置,这样才能得到最大的数字,也即 72765。所以可以采取从后向前遍历的方式,只有大于的时候才更新下标即可。

总结:
我们先把这个数字变成一个数组,然后遍历这个数组,找到每一位后面最大的数字,如果这个最大的数字有多个,我们则取靠后位置的那个数字,一旦找到就结束遍历。

代码

class Solution {
    public int maximumSwap(int num) {
        if(num < 10) return num;
        char[] s = Integer.toString(num).toCharArray();
        for(int i = 0;i < s.length;i ++) {
            int maxIndex = i;
            // 如果遇到多个数字,取靠后面的数字,所以采取从后向前遍历的方式
            for(int j = s.length - 1;j >= i + 1;j --) {
                if(s[j] > s[maxIndex]) {
                    maxIndex = j;
                }
            }
            // 说明 i 后面有大于 s[i] 的数字
            if(maxIndex != i) {
                char temp = s[i];
                s[i] = s[maxIndex];
                s[maxIndex] = temp;
                return Integer.parseInt(new String(s));
            }
        }
        return num;
    }
}

LeetCode.670. 最大交换_第1张图片

你可能感兴趣的:(leetcode刷题,java,leetcode,算法)