暴力法是尝试所有的变化,要用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;
}
}
网友评论