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

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

题目

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

示例

示例 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))))
目录
相关文章
|
7月前
|
测试技术
力扣888 公平糖果交换
力扣888 公平糖果交换
|
Java
24. 两两交换链表中的节点 -- 力扣 --JAVA
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
43 0
|
7月前
|
测试技术
LeetCode | 24.两两交换链表中的节点(C语言版)
LeetCode | 24.两两交换链表中的节点(C语言版)
87 0
|
2月前
LeetCode第二十四题(两两交换链表中的节点)
这篇文章介绍了LeetCode第24题的解法,即如何通过使用三个指针(preNode, curNode, curNextNode)来两两交换链表中的节点,并提供了详细的代码实现。
22 0
LeetCode第二十四题(两两交换链表中的节点)
|
4月前
|
算法
LeetCode第24题两两交换链表中的节点
这篇文章介绍了LeetCode第24题"两两交换链表中的节点"的解题方法,通过使用虚拟节点和前驱节点技巧,实现了链表中相邻节点的交换。
LeetCode第24题两两交换链表中的节点
|
6月前
|
机器学习/深度学习 存储 算法
Python5种算法回溯+剪枝、字典序、递归交换、计数回溯、迭代法 实现全排列ll【力扣题47】
Python5种算法回溯+剪枝、字典序、递归交换、计数回溯、迭代法 实现全排列ll【力扣题47】
|
6月前
|
存储 机器学习/深度学习 算法
python 3种算法 回溯法、字典序生成、递归交换 实现全排列【力扣46题】
python 3种算法 回溯法、字典序生成、递归交换 实现全排列【力扣46题】
|
6月前
|
存储 SQL 算法
|
7月前
|
人工智能
888. 公平的糖果棒交换(力扣)
888. 公平的糖果棒交换(力扣)
|
7月前
|
索引
【力扣刷题】删除链表的倒数第 N 个结点、两两交换链表中的节点、随机链表的复制
【力扣刷题】删除链表的倒数第 N 个结点、两两交换链表中的节点、随机链表的复制
37 0