最大交换

🎯 问题描述(来源于LeetCode)

1
2
3
4
5
给定一个非负整数,你**至多**可以交换一次数字中的任意两位。返回你能得到的最大值。
示例 1 :
输入:2736
输出:7236
解释:交换数字2和数字7。

💻 代码实现

1
2
3
4
5
6
7
8
9
10
11
12
class Solution:
def maximumSwap(self, num: int) -> int:
digits = list(str(num))
n = len(digits)
last = {int(d): i for i, d in enumerate(digits)}
for i in range(n):
for d in range(9, int(digits[i]), -1):
if last.get(d, -1) > i:
j = last[d]
digits[i], digits[j] = digits[j], digits[i]
return int(''.join(digits))
return num

📊 性能分析

提交结果

  • 运行时间:0ms击败100.00%
  • 内存消耗:17.39MB击败83.43%

复杂度验证

  • 时间复杂度:O(n)O(n)
  • 空间复杂度:O(n)O(n)