题目名称
给定一个非负整数,你至多可以交换一次数字中的任意两位。返回你能得到的最大值。
示例
输入: 2736
输出: 7236
解释: 交换数字2和数字7。
题解
首先采用求余的方式,将数字的每位按照10的次方数放置到数组中
接下来用双重循环判断是否需要替换对应元素,从数字最大位开始向最小位遍历,找寻剩余元素中的最大值与当前元素进行替换
最后得到的元素就是能得到的最大值。
答案
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
|
var maximumSwap = function(num) { let nums = [] while(num / 10 > 0) { const mod = num % 10 nums.push(mod) num = (num - mod) / 10 } for(let i = nums.length - 1; i >= 0; i--) { let max = nums[i], maxIndex = i for(let j = i; j >= 0; j--) { if(nums[j] > max) { max = nums[j] maxIndex = j } } if(maxIndex !== i) { nums[maxIndex] = nums[i] nums[i] = max break; } } let total = 0 for(let i = nums.length - 1; i >= 0; i--) { total += nums[i] * Math.pow(10, i) } return total };
|