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