leetcode 670. Maximum Swap 的思路与python实现

博客介绍了LeetCode 670题目的解决策略和Python代码实现。思路是通过遍历找到最高位和最大数字(如9),并进行交换。若最大数字不是9,则继续寻找次大的数字与次高位交换。关键在于正确处理最大数字本身就是最高位的情况。代码执行效率较高,时间复杂度为O(n)。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Given a non-negative integer, you could swap two digits at most once to get the maximum valued number. Return the maximum valued number you could get.

Input: 2736
Output: 7236
Explanation: Swap the number 2 and the number 7.

思路

只能交换一次,很容易想到是要把最大的数字和最高位交换。最大的数字如果有很多个,则找最低位的那一个。

而一位数字的范围也就是0-9。

粗略想法:遍历最低位到最高位,找9。找到9以后就跟最高位交换。如果没有9,就-1,找8、7、6...

考虑如下例子:

Input: 9128
Output: 9821

当我们找到9时,它本身就是最高位。所以要跳过。

而我们找到8时,也不是跟最高位交换,而是跟第二位交换。

所以我们需要另一个int来记录“当前最高位”,初始值为0。

 

时间复杂度为n

class Solution:
    def maximumSwap(self, num: int) -> int:
        numlist = [int(i) for i in str(num)]
        digit = 9
        start = 0
        while digit > 0:
            for i in range(len(numlist) - 1, start - 1, -1):
                if numlist[i] == digit:
                    while int(numlist[start]) >= digit:
                        start += 1
                        if start >= len(numlist) - 1:
                            return num
                    if start >= i:
                        break
                    temp = numlist[start]
                    numlist[start] = numlist[i]
                    numlist[i] = temp
                    numlist = ''.join([str(i) for i in numlist])
                    return int(numlist)
            digit -= 1
        return num

Runtime: 32 ms, faster than 88.68% of Python3 online submissions for Maximum Swap.

Memory Usage: 13.2 MB, less than 29.07% of Python3 online submissions for Maximum Swap.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值