670. 最大交换

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

示例 1 :

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

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/maximum-swap
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

题解

创建从大到小的排序数组与原数据比较找出第一个不相同位置,然后从最后开始找到第一个值等于刚才位置排序数组的值,替换两者位置即可得到最大值

/**
 * @param {number} num
 * @return {number}
 */
var maximumSwap = function(num) {
    num = (num + '').split('')
    let temp = [...num].sort((a, b) => b - a)
    for (let i = 0; i < num.length; i++) {
        if (num[i] != temp[i]) {
            for (let j = 0; j < num.length; j++) {
                if (num[num.length - 1 - j] == temp[i]) {
                    [num[i], num[num.length - 1 - j]] = [num[num.length - 1 - j], num[i]];
                    return num.join('') * 1
                }
            }
            break
        }
    }
    return num.join('') * 1
};

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注