?好久没有更新力扣的每日一题了,今天刚好先做了这道题,就发一下吧。
? 这道题用了贪心的思想,在交换的时候,要选择交换后最大的值。
? 首先,要创建两个数组,一个正常记录值为arr1,一个利用sort排序排好为arr2。然后从高位开始对比,比较出第一个不相同的数字,这个数字的位置就是需要变换的第一个位i,
? 而第二个要变换位置的地方,其数值为第一个不相同的数字中arr2的值。根据最大化的要求,我们要尽量从低位寻找这个值,所以从arr1低位开始寻找,找到后进行交换即可。
![class Solution {
public int maximumSwap(int num) {
int len = 0;
int temp = num;
while(temp > 0){ //统计长度
len++;
temp /= 10;
}
if(len == 1) return num; //一位数不用变
int[] arr1 = new int[len]; //创建两个对比数组
int[] arr2 = new int[len];
temp = num;
for(int i = 0; i < len; i++){ //同时给两个数组赋值
arr1[i] = temp % 10;
arr2[i] = temp % 10;
temp /= 10;
}
Arrays.sort(arr2); //排序好的是理论上交换无数次后的最大值
for(int i = len - 1; i >= 0; i--){
if(arr1[i] != arr2[i]){ //从高位寻找第一个需要交换的位置
for(int k = 0; k <= i - 1; k++){ //从低位寻找第二个需要交换的位置
if(arr1[k] == arr2[i]){ //进行交换
int change = arr1[k];
arr1[k] = arr1[i];
arr1[i] = change;
break;
}
}
break;
}
}
int num1 = 0;
for(int i = len - 1; i >= 0; i--){ //将数组转换成int类型
num1 = num1 * 10 + arr1[i];
}
return num1;
}
}](https://img-blog.csdnimg.cn/direct/93160549a832478187cc20939cf2d100.png)
? 如果这道题的分享对您有所帮助,点个赞或关注,我会经常分享算法题的讲解,与大伙儿一同进步。