给定一个非负整数,你至多可以交换一次数字中的任意两位。返回你能得到的最大值。
示例 1 :
输入: 2736
输出: 7236
解释: 交换数字2和数字7。
示例 2 :
输入: 9973
输出: 9973
解释: 不需要交换。
注意:
- 给定数字的范围是 [0, 10^8]
解题
/**
* @param {number} num
* @return {number}
*/
var maximumSwap = function (num) {
let ns = [];
while (num > 0) {
ns.push(num % 10);
num = (num / 10) | 0;
}
let arr = ns.map((v, i) => [v, i]).sort((a, b) => a[0] - b[0]);
let i = arr.length - 1;
while (i >= 0) {
if (arr[i][0] !== ns[i]) {
let j = i;
while (i && arr[i - 1][0] === arr[i][0]) {
i = i - 1;
}
let n = ns[j];
ns[j] = arr[i][0];
ns[arr[i][1]] = n;
break;
}
i--;
}
return +ns.reverse().join("");
};