1.题目
2.分析
- 将各个位置的数按照从大到小排序,然后将得到的数组和现有数组顺序比较。当出现不一致的时候,就进行交换。需要注意的是
983868 应该被替换成 988863,而不是 938868。
3.代码
class Solution:
def maximumSwap(self, num: int) -> int:
arr = []
while(num):
num,tmp = divmod(num,10)
arr.append(tmp)
arr.reverse()
bak = copy.deepcopy(arr)
arr.sort()
arr.reverse()
# 如果下标相同
idx = 0
while(idx < len(arr) and arr[idx]==bak[idx]):
idx+=1
# print("idx=",idx)
# print(bak)
# 说明可以交换得到最大值,而不是使用index查找。index查找得到的是第一次值的下标,但这样是不准确的
if idx < len(arr):
# ori = bak[idx] # 2
# 从后往前找第一个值为arr[idx]的
for new_idx in reversed(range(len(bak))):
if bak[new_idx] == arr[idx]:
break
bak[idx],bak[new_idx] = bak[new_idx] ,bak[idx]
# print(bak)
res = 0
idx = 0
while (idx < len(bak)):
res = res* 10 + bak[idx]
idx+=1
return