【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))