670. 最大交换

2020-07-12  本文已影响0人  Chiduru

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

示例 1 :

输入: 2736
输出: 7236
解释: 交换数字2和数字7。
示例 2 :

输入: 9973
输出: 9973
解释: 不需要交换。
注意:

给定数字的范围是 [0, 108]

【Idea】
二层循环,第一层是普通O(n),第二层在当前元素下标+1的基础上进行遍历,内嵌遍历每次找最大值下标,判断是否符合交换条件并return, 不符合则继续往下走。

【Solution】

class Solution:
    def maximumSwap(self, num: int) -> int:
        nlist = [n for n in str(num)]
        num_len = len(nlist)
        m = 0
        for i in range(num_len):
            m = i
            for j in range(i+1, num_len):
                if nlist[j] >= nlist[m]:
                    m = j
            if m != i and nlist[i] != nlist[m]:
                nlist[i], nlist[m] = nlist[m], nlist[i]
                break
        return int("".join(nlist))

截屏2020-07-12 下午5.58.10.png
上一篇 下一篇

猜你喜欢

热点阅读