670. Maximum Swap

暴力法是尝试所有的变化,要用O(n2), 简单的方法是利用indexOfNum数组来记下给的num里从0到9这些数字的index.

比如num = 2736,
则indexOfNum[2] = 0,
indexOfNum[7] = 1,
indexOfNum[3] = 2,
indexOfNum[4] = 6.
于是我们从左到右(高位到低位)遍历num转换成的char array nums, 同时从9到当前digit查index, 看有没有比当前digit大的数的index却大于当前digit的index的。比如num = 2736时,当我们遍历到2的时候,我们发现indexOfNum[7] > i. 这就说明有比nums[i]大的数字反而到低位去了,于是我们就交换,因为只能交换一次,我们直接就返回了。
http://blog.csdn.net/xu2645318400/article/details/78056983

class Solution {
    public int maximumSwap(int num) {
        char[] nums = String.valueOf(num).toCharArray();
        int[] indexOfNum = new int[10];
        for (int i = 0; i < nums.length; i++){
            indexOfNum[nums[i] - '0'] = i;
        }
        for (int i = 0; i < nums.length; i++){
            for (int j = 9; j > nums[i] - '0'; j--){
                if (indexOfNum[j] > i){
                    char temp = nums[i];
                    nums[i] = nums[indexOfNum[j]];
                    nums[indexOfNum[j]] = temp;
                    return Integer.parseInt(new String(nums));
                }
            }    
        }
        return num;
    }
}

你可能感兴趣的:(670. Maximum Swap)