题目:
解题方法
1.将整数转换成列表
2.从列表第一个数开始,每取出一次,找出列表余下数据(列表list1)的最大值,若取出的值小于list1的最大值,说明需要进行置换,置换处理:
- 找出list1最后一个最大值在原列表的位置(sition =j+i+1,因为列表余下数据从i+1开始),然后与取出的数据进行置换。
- 列表余下数据,N个最大值情况下,与最后一个最大值进行置换得到的会是最大值(如99 则置换数据为第二个9)
3.置换后将原列表转换为整数
- 先将列表的元素转换为字符串,使用map(str,s)方法
- 接着将列表数据进行拼接(循环获取列表数据)(ps:不知道为啥join()方法在此题中无效)
- 将拼接的字符串转换成整数形式
代码
class Solution(object):
def maximumSwap(self, num):
"""
:type num: int
:rtype: int
"""
#将整数转换成列表
s = [int(i) for i in str(num)]
nums = len(s)
for i in range(nums-1):
list1 = s[i+1:]
maxNum = max(list1)
if s[i]<maxNum :
counts = list1.count(maxNum)
count1 =0
#找出最大值在原列表的位置
for j in range(len(list1)):
if list1[j] ==maxNum:
count1+=1
if count1 == counts:
sition = j+i+1
break
#置换
s[i],s[sition] =s[sition],s[i]
break
#列表元素转换为字符串
s = map(str,s)
# nums = int("".join(s))
nums = ''
for i in s:
nums+=i
return int(nums)