题目名称

给定一个非负整数,你至多可以交换一次数字中的任意两位。返回你能得到的最大值。

示例

输入: 2736
输出: 7236
解释: 交换数字2和数字7。

题解

首先采用求余的方式,将数字的每位按照10的次方数放置到数组中

接下来用双重循环判断是否需要替换对应元素,从数字最大位开始向最小位遍历,找寻剩余元素中的最大值与当前元素进行替换

最后得到的元素就是能得到的最大值。

答案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
/**
* @param {number} num
* @return {number}
*/
var maximumSwap = function(num) {
let nums = []
while(num / 10 > 0) {
const mod = num % 10
nums.push(mod)
num = (num - mod) / 10
}
for(let i = nums.length - 1; i >= 0; i--) {
let max = nums[i], maxIndex = i
for(let j = i; j >= 0; j--) {
if(nums[j] > max) {
max = nums[j]
maxIndex = j
}
}
if(maxIndex !== i) {
nums[maxIndex] = nums[i]
nums[i] = max
break;
}
}
let total = 0
for(let i = nums.length - 1; i >= 0; i--) {
total += nums[i] * Math.pow(10, i)
}
return total
};