leetcode 670. 最大交换

题目:
在这里插入图片描述
解题方法

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)
  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值