Files
leetcode/python/problem_670/solution1.py
2025-02-17 15:07:10 -08:00

29 lines
953 B
Python

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