'''
解题思路
核心就一句话:就是把第一个小数和它后面最大的大数进行交换
理由如下:
要让一个数变大,要尽可能的让其高位变大
比如说 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