670. 最大交换

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

示例 1 :

输入: 2736

输出: 7236

解释: 交换数字2和数字7。

示例 2 :

输入: 9973

输出: 9973

解释: 不需要交换。

思路 使得高位(靠左的)的值更大

s[i]与后面的最大值(若有多个最大值,则取位次最小的,靠右的),交换位置

 1/**
2 * @param {number} num
3 * @return {number}
4 */

5var maximumSwap = function(num) {
6    var s = num.toString()
7
8    for(var i=0; i<s.length; i++) {
9        var init = s[i]
10        var max = init
11        for(var j=i+1; j<s.length; j++) {
12            if(s[j] > max) max = s[j]
13        }
14        if(max !== init) {
15            s = s.replace(init, max)
16            s = reverseString(s)
17            s = s.replace(max, init) // 保证replace的是位次最小的
18            s = reverseString(s)
19            break
20        }
21    }
22
23    return Number(s)
24}
25
26function reverseString(s){
27    return s.split('').reverse().join('')
28}
原文地址:https://www.cnblogs.com/rencoo/p/9735197.html