LeetCode | 670. 最大交换

  • 难度 - 中等

  • 题目地址 - https://leetcode-cn.com/problems/maximum-swap/

  • 描述:定一个非负整数,你至多可以交换一次数字中的任意两位。返回你能得到的最大值。

  • 思路:找到列表中第一个跟大到小排列列表不一样的值,互换位置

  • 难点:定位到交换两数中的后者(较大者)

    • 定位方式1:按照num_list顺序定位,num_list.index(num_sort_list[i])得其下标。bug:当同时存在相同两个num_sort_list[i]时,此方法失效。

    • 定位方式2:按照num_list逆序定位,num_list[::-1].index(num_sort_list[i])得其逆序的下标。列表长度-1,减去逆序下标,即得其下标。

'''
[9, 3, 6, 7]
[7, 6, 3, 9] #[::-1]
[9, 7, 6, 3] #sort
'''
class Solution:
    def maximumSwap(self, num):
        num_list = [int(i) for i in list(str(num))]
        num_sort_list = sorted(num_list,reverse = True)
        for i in range(len(num_list)):
            if num_list[i] != num_sort_list[i]:
                num_list[i], num_list[len(num_list)-num_list[::-1].index(num_sort_list[i])-1] = \
                    num_sort_list[i], num_list[i]
                break
        return int("".join([str(i) for i in num_list]))
    
print(Solution().maximumSwap(98368))


336 字