https://leetcode.com/problems/maximum-swap
670. Maximum Swap
給一個整數num 最多可以交換一次2位數字以獲得最大值
回傳可以獲得的最大值
Example 1:
Input: num = 2736
Output: 7236
Explanation: 交換2跟7
Example 2:
Input: num = 9973
Output: 9973
Explanation: 不用交換
Constraints:
0 <= num <= 10^8
思路:
原本很單純右起直接找最大值 再左起找能交換的
結果在測資 98368 就錯了
改為先排序 判斷從哪個位置開始不同 再找出原始位置並交換
因為 str 不能直接交換兩個位置 所以轉成 list 交換後再 join
Python Code:
class Solution:
def maximumSwap(self, num: int) -> int:
num_str = str(num)
num_list = list(num_str)
num_sorted = sorted(num_list, reverse=True)
if num_list == num_sorted: return num
for i, temp in enumerate(num_sorted):
if temp != num_list[i]:
idx = num_str.rindex(temp)
num_list[i], num_list[idx] = num_list[idx], num_list[i]
return int(''.join(num_list))
return num
怪怪的怪怪的