leetcode670-最大交换

题目链接

670. 最大交换 - 力扣(LeetCode)

解题思路

由于对于整数num的十进制数字位长最长为8位,任意两个数字交换最多有28种不同的交换方法,因此我们可以尝试遍历所有可能的数字交换方法即可,并找到交换后的最大数字即可。

  • 我们将数字存储为长度为n的列表,其中n为整数num的十进制位数的长度。对于位置为(i,j)的每个候选交换,我们交换数字并记录组成的新数字是否大于当前答案。
  • 对于前导零的问题我们也不需要特殊处理
  • 由于数字只有8位,所以我们不必考虑交换后一处的风险

解题代码

class Solution:
    def maximumSwap(self, num: int) -> int:
        ans = num
        s = list(str(num))
        for i in range(len(s)):
            for j in range(i):
                s[i],s[j] = s[j],s[i]
                ans = max(ans,int(''.join(s)))
                s[i],s[j] = s[j], s[i]

        return ans

你可能感兴趣的:(算法)