题解 | 最大数字交换

最大数字交换

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-19 09:58
河海大学 Java
最喜欢春天的奇亚籽很...:同学,是小红书不是小哄书,一眼就能看到的错误
投了多少份简历才上岸
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
03-19 10:38
实力求职者:真的绷不住了,第一张霸总人设,第二张求生欲拉满
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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