LeetCode 最大交换
@author:Jingdai
@date:2020.12.25
题目描述(670题)
给定一个非负整数,你至多可以交换一次数字中的任意两位。返回你能得到的最大值。
示例 1 :
输入: 2736 输出: 7236 解释: 交换数字2和数字7。
思路及代码
方法1 排序
首先看一种好理解的方法,第一步将原数字按从大到小的顺序排序,也就是如果不规定交换次数所能达到的最大值。如图,比如题目中的 2736
排序后就得到了 sortedNums = 7632
。然后我们对比排序后的数和之前的数,找到第一个不一样的数,如这个里面就是2和7,把2和7交换就行。2的下标已知,7的下标我们不知道,所以我们只要遍历在找到7的下标然后交换就可以了。
但是还有一个小问题,就是如果有重复的元素的情况,如图,比如 nums
变成 27367
,这时还是应该是 2 和 7 交换,但是有 2 个 7 ,我们应该选择后面的那个7,因为这样会让结果更大,所以我们应该从后面找7的下标。
最后的代码如下。
public int maximumSwap(int num) {
char[] nums = String.valueOf(num).toCharArray();
// sort
char[] sortedNums = nums.clone();
Arrays.sort(sortedNums)