给定一个非负整数,你至多可以交换一次数字中的任意两位。返回你能得到的最大值。
示例 1 :
输入: 2736 输出: 7236 解释: 交换数字2和数字7。示例 2 :
输入: 9973 输出: 9973 解释: 不需要交换。注意:
- 给定数字的范围是 [0, 108]
/**
* @param {number} num
* @return {number}
*/
// 就是把第一个小数和它后面最大的大数进行交换
// 要让数字的数值最大,要尽可能的让其的最高位变大,让最高位的小数和后面的大数交换
var maximumSwap = function(num) {
let last = new Array(10).fill(-1);
num = Array.from(num.toString());
for(let i = 0;i < num.length;i++){
last[num[i] - '0'] = i;
}
for(let i = 0;i < num.length;i++){
for(let d = 9;d > (num[i] - '0');d--){
if(last[d] > i){
let temp = num[last[d]];
num[last[d]] = num[i];
num[i] = temp;
return Number(num.join(''));
}
}
}
return Number(num.join(''));
};