leetcode 670. 最大交换

发布时间:2024年01月23日

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

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)
文章来源:https://blog.csdn.net/huanxianxianshi/article/details/135787358
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。