'''
解题思路
核心就一句话:就是把第一个小数和它后面最大的大数进行交换
理由如下:
要让一个数变大,要尽可能的让其高位变大
比如说 2736 , 让最高位2变大成3,也比让3那位变成9来的大, 3736 >>>> 2796
所以,本题的核心要义就是 让最高位的小数和后面的大数交换
小数我们找到了,那那个大数怎么找呢?大数需要满足以下特点
比小数靠后(废话)
值比小数大(废话)
尽可能的后(因为,该大数位交换后,来的是个小数,所以要把这个小数尽可能放到后面去)
比如 12344 ,是42341 大还是 42314 大呢?显而易见嘛
'''
class Solution:
def maximumSwap(self, num: int) -> int:
L = list(str(num))
n = len(L)
#print('L=',L)
#print('n=',n)
maxv = num
indexMax = n-1
indexNoMax = n-1
for i in range(n-2,-1,-1):
if L[i] > L[indexMax]:
indexMax = i
if L[i] != L[indexMax]:
indexNoMax = i
if indexNoMax < indexMax:
t = L.copy()
t[indexNoMax],t[indexMax] = t[indexMax],t[indexNoMax]
tt = int(''.join(t))
if tt > maxv:
maxv = tt
#print(maxv)
return maxv