木又连续日更第84天(84/100)
木又的第210篇leetcode解题报告
数学
类型第26篇解题报告
leetcode第210题:最大交换
https://leetcode-cn.com/problems/maximum-swap/
【题目】
给定一个非负整数,你至多可以交换一次数字中的任意两位。返回你能得到的最大值。
示例 1 :
输入: 2736
输出: 7236
解释: 交换数字2和数字7。
示例 2 :
输入: 9973
输出: 9973
解释: 不需要交换。
注意: 给定数字的范围是 [0, 108]
【思路】
把最大的数放在最前面,这样得到的数肯定是最大的。
就是说,不断判断第一个数是不是最大的数,第二个数是不是第二大的数……如果第i个数不是第i大的数,则该数和第i个数交换。
具体来说,将原数当做字符串str1进行排序后得到str2,一一比较str1和str2每个字符是否相等,如果不相等(假设是第i位),则str1[i]处的字符应该是str2[i],并且str1中最后一个str2[i]字符应该被替换为原始的str1[i]字符,然后直接退出循环。有一点点绕,看代码吧。
【代码】
python版本
class Solution(object):
def maximumSwap(self, num):
"""
:type num: int
:rtype: int
"""
num1 = str(num)
num2 = sorted(num1, reverse=True)
for i in range(len(num1)):
if num1[i] != num2[i]:
tmp = num1.rindex(num2[i])
num1 = num1[:i] + num2[i] + num1[i+1: tmp] + num1[i] + num1[tmp+1:]
break
return int(num1)