美文网首页
670. Maximum Swap

670. Maximum Swap

作者: greatseniorsde | 来源:发表于2018-02-09 14:21 被阅读0次

    暴力法是尝试所有的变化,要用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

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