算法列表

670.最大交换 中等

布莱克2026-06-13 22:40数学

问题:

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

示例 1 :

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

示例 2 :

输入: 9973
输出: 9973
解释: 不需要交换。

注意:

  1. 给定数字的范围是 [0, 108]

回答:

var maximumSwap = function (num) {
    let arr = String(num).split('');
    //右边最大数字位置
    let maxpos = arr.length - 1
    //p 最左边那个需要交换的位置  q 右边最大数字的最后出现位置
    let p = -1, q = 0
    for (let i = arr.length - 2; i >= 0; i--) {
        if (arr[i] > arr[maxpos]) {
            maxpos = i
        }
        else if (arr[i] < arr[maxpos]) {
            p = i
            q = maxpos
        }
    }
    if (p === -1) return num;
    [arr[p], arr[q]] = [arr[q], arr[p]]

    return Number(arr.join(''))
};


assistant