670. Maximum Swap
Description
You are given an integer num
. You can swap two digits at most once to get the maximum valued number.
Return the maximum valued number you can get.
Example 1:
Input: num = 2736 Output: 7236 Explanation: Swap the number 2 and the number 7.
Example 2:
Input: num = 9973 Output: 9973 Explanation: No swap.
Constraints:
0 <= num <= 108
Solutions
Solution: Greedy
- Time complexity: O(n)
- Space complexity: O(n)
JavaScript
js
/**
* @param {number} num
* @return {number}
*/
const maximumSwap = function (num) {
const nums = `${num}`.split('');
const n = nums.length;
let left = -1;
let right = n - 1;
let max = right;
for (let index = n - 1; index >= 0; index--) {
const current = nums[index];
if (current < nums[max]) {
left = index;
right = max;
}
if (current <= nums[max]) continue;
max = index;
}
if (left === -1) return num;
[nums[left], nums[right]] = [nums[right], nums[left]];
return Number(nums.join(''));
};