题目
给定一个非负整数,你至多可以交换一次数字中的任意两位。返回你能得到的最大值。
示例
示例 1 :
输入: 2736
输出: 7236
解释: 交换数字2和数字7。
示例 2 :
输入: 9973
输出: 9973
解释: 不需要交换。
注意:
给定数字的范围是 [0, 108]
思路
总体思路是现将所有位的数字全部按照从大到小的顺序排序,将排完序后的数字依次与原数字的每一位相比较,若相等则跳过,若不相等则替换原数的该两位数字,这里注意:若较大的数有重复,则较小的数应该替换为最后一位较大数
题解
class Solution: def maximumSwap(self, num: int) -> int: x = list(map(int,list(str(num)))) # 降序排序 y = sorted(x, reverse = True) n = len(x) for i in range(n): if x[i] != y [i]: # 最后一位较大数的下标 tmp = n - 1 - x[::-1].index(y[i]) # 替换 x[tmp] = x[i] x[i] = y[i] break # 返回数字 return int(''.join(list(map(str, x))))