LeetCode每日一题系列
题目:670. 最大交换
难度:中等
题目
给定一个非负整数,你至多可以交换一次数字中的任意两位。返回你能得到的最大值。
示例
示例 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))))