题目内容
给定一个非负整数,你至多可以交换一次数字中的任意两位。返回你能得到的最大值。
示例 1 :
输入: 2736
输出: 7236
解释: 交换数字2和数字7。
示例 2 :
输入: 9973
输出: 9973
解释: 不需要交换。
注意:
- 给定数字的范围是 [0, 10]
思考
看到这道题目我们来分析一下,首先非负数那说明题目只有正数一种可能不用考虑有负数的情况了,其次至多交换一次说明我们对数字只有交换一次或者不交换,最后返回其最大值,题目分析完毕。
我想到了贪心算法,我们只需要将所有最大的数字放到高位即可。
我们将数字转换成列表将其进行从大到小排序,如果排序完的列表当前值与原列表当前值不同则进行将原列表的值与排序后的值到原列表的映射进行交换即可。
代码如下
class Solution(object):
def maximumSwap(self, num):
"""
:type num: int
:rtype: int
"""
num = [int(item) for item in list(str(num))]
sort_list = [int(item) for item in num]
sort_list.sort(reverse=True)
tep = -1
for i in range(len(sort_list)):
if num[i] != sort_list[i]:
tep = len(sort_list) - [item for item in num[::-1]].index(sort_list[i]) - 1
if tep != -1:
num[i], num[tep] = num[tep], num[i]
break
return int(''.join([str(item) for item in num]))