LeetCode每日一题——670. 最大交换

LeetCode每日一题系列

题目:670. 最大交换
难度:中等


文章目录

  • LeetCode每日一题系列
  • 题目
  • 示例
  • 思路
  • 题解


题目

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

示例

示例 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))))

你可能感兴趣的:(#,算法实例,leetcode,算法,职场和发展,数据结构,python)