题解 | 最大数字交换

最大数字交换

https://www.nowcoder.com/practice/ffcd59fbf5814d2e94c0e2f4a679473c

贪心的思想,要找到最大的数,如果是按照从大到小排序,那么当前就是最大数字,如果不是,那么很容易想到,尽量把最大的数字放最前面。
解题步骤:
1、把数字转成列表方便操作。
2、从当前遍历位置往右扫描每一位,找有没有更大的数字可以交换。
3、如果找到了比当前位大的数字,就交换它们。(注意如果有多个最大值,我们选取最后一位最大值,让数值最大化)
如何找最后一个匹配元素的下标?
s[::-1] 把列表倒过来。
index(mx) 是元素mx在倒序里的位置。
再用len(s)-s[::-1].index(mx)-1 转换回原列表的下标。
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param num string字符串
# @return string字符串
#
class Solution:
    def maximumSwap(self, num: str) -> str:
        # write code here
        s, i, n = list(num), 0, len(num)
        while i<n-1:
            mx = max(s[i+1:])
            if s[i]<mx:
                j = n-s[::-1].index(mx)-1
                s[i], s[j] = s[j], s[i]
                break
            i += 1
        return ''.join(s)

全部评论

相关推荐

想踩缝纫机的小师弟练...:不理解你们这些人,要放记录就把对方公司名字放出来啊。不然怎么网暴他们
点赞 评论 收藏
分享
03-17 15:22
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务