Problem : https://leetcode.com/problems/maximum-swap/
To get maximum value, we need to have the larger digits on the higher end.
class Solution:
def maximumSwap(self, num: int) -> int:
digits = []
# get digits
while num:
digits.append(num % 10)
num = num // 10
digits = digits[::-1]
# find the max digits on right of each position
N = len(digits)
mxFromRight = [0] * N
mxFromRight[N-1] = N-1
mxForNow = N-1
for i in reversed(range(N)):
if digits[mxForNow] < digits[i]:
mxForNow = i
mxFromRight[i] = mxForNow
for i in range(N):
# iterate from left and swap the first digit not equal to the maximum digit from right side.
if digits[i] == digits[mxFromRight[i]] :
continue
digits[i], digits[mxFromRight[i]] = digits[mxFromRight[i]], digits[i]
break
# assemble the final result
result = 0
for i in range(N):
result = result * 10
result += digits[i]
return result
No comments:
Post a Comment