LeetCode python-179. 最大数

LeetCode python-179. 最大数

先看题目:
(题目来自力扣)
在这里插入图片描述
方法一:
思路:通过遍历 i 和 j,将数组里的数转换成字符串,通过拼接并比较大小,最后通过空串(‘’)连接并输出。

class Solution:
    def largestNumber(self, nums):
        n = len(nums)
        for i in range(n):
            for j in range(n - 1 - i):
                temp1 = str(nums[j]) #将数组转换成字符串,因为字符串具有拼接的功能
                temp2 = str(nums[j+1])
                if temp1 + temp2 < temp2 + temp1:
                    temp = nums[j] #以下三行代码作用是交换数字顺序,将最小的移到最右边。如果变换了if语句的符号为<,那么结果将是最小的数
                    nums[j] = nums[j+1]
                    nums[j+1] = temp
        output = ''
        for i in nums:
            output = output + str(i)
        if output[0] == '0': #如果输出第一个字符为0,则返回零。此必须有,否则会报错。若给定[0,0],不写此语句,则返回'00'
       	    return '0'
        return output

在这里插入图片描述

方法二:
思路:将数组转换成字符串(第六行代码,非常重要),通过内置函数sorted函数,及map函数(映射作用),完成拼接。
其中调用__lt__函数是比较大小的作用。(这里没有找到特别清晰的文章,只知道其功能,希望有补充的可下方评论或附上链接)
python中map()函数的用法讲解
文章中还提到了将数组,元组等转化成字符串,通过str()函数,可详细看看。
此处的key,是表示排序是按照什么来排序。

class LargerNumKey(str):
    def __lt__(x, y):
        return x + y > y + x
class Solution:
    def largestNumber(self, nums):
        largest_num = ''.join(sorted(map(str, nums),key=LargerNumKey))
        return '0' if largest_num[0] == '0' else largest_num #如果最后结果是第一个数是0,就返回0,其余返回最大数.

在这里插入图片描述

版权声明:本文为weixin_43675940原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_43675940/article/details/102725511