题目描述
给定一个非负整数,你至多可以交换一次数字中的任意两位。返回你能得到的最大值。
示例 1 :
输入: 2736
输出: 7236
解释: 交换数字2和数字7。
示例 2 :
输入: 9973
输出: 9973
解释: 不需要交换。
注意:
- 给定数字的范围是 [0, 10^8]
解法一
-
暴力解法
# 数字范围不大暴力解法足够快 class Solution: def maximumSwap(self, num: int) -> int: ans = [0, 0] list1 = list(str(num)) for i, x in enumerate(list1): for j, y in enumerate(list1[i + 1:]): if int(y) >= int(ans[1]): ans[0] = i + j + 1 ans[1] = y if int(x) < int(ans[1]): temp = list1[i] list1[i] = list1[ans[0]] list1[ans[0]] = temp break else: ans = [0, 0] return int(''.join(list1))
-
时间复杂度
- 问题规模不大,速度已经足够了
O ( n 2 ) O(n^2) O(n2)