This commit is contained in:
2025-02-17 15:07:10 -08:00
parent 99362f49e0
commit 8eafc93f2f
2 changed files with 53 additions and 0 deletions

View File

@@ -0,0 +1,25 @@
# 670. Maximum Swap
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

View File

@@ -0,0 +1,28 @@
class Solution:
def maximumSwap(self, num: int) -> int:
# we need to track what is the highest number
# from the right of current idx
# convert the int to str
str_num = list(str(num))
n = len(str_num)
max_right_idx = [0] * n
# last idx will always be same
max_right_idx[n - 1] = n - 1
for i in range(n - 2, -1, -1):
# if the current number is greater than max of the right
if str_num[i] > str_num[max_right_idx[i + 1]]:
max_right_idx[i] = i
# keep the max from right
else:
max_right_idx[i] = max_right_idx[i + 1]
# now we go from left to right
for j in range(n):
if str_num[j] < str_num[max_right_idx[j]]:
str_num[j], str_num[max_right_idx[j]] = str_num[max_right_idx[j]], str_num[j]
return int("".join(str_num))
return num