解题思路:
要使两个数进行交换以后产生最大交换,我们可以想到,其中一个交换的数所在的位数越大,更新后的数也会越大,
那么基本思路就可以变为:找到位置靠前的可交换数,向其后面的所有数找到最大的一个,然后进行交换即可。
这里往后找最大的数,便体现了贪心。
代码部分:
class Solution {
public int maximumSwap(int num) {
char[] charArray = String.valueOf(num).toCharArray();
int n = charArray.length;
int maxIndex = n-1; //最大数的下标
int id1 = -1, id2 = -1; //获取需要交换的两个数的下标
for(int i = n-1; i >= 0; i--){ //迭代找到靠前的可交换数
if (charArray[i] > charArray[maxIndex]){ //若前一个数更大,则更新最大数下标
maxIndex = i;
}else if (charArray[i] < charArray[maxIndex]){
id1 = i;
id2 = maxIndex;
}
}
if(id1 >= 0) { //若有可交换数,则调用交换方法
swap(charArray,id1,id2);
return Integer.parseInt(new String(charArray));
} else {
return num;
}
}
void swap(char[] c, int i, int j) {
char temp = c[i];
c[i] = c[j];
c[j] = temp;
}
}