leetcode刷题#day7

最大数 排序问题(带例子)

leetcode刷题#day7_第1张图片
这题主要看是否知道python中的一个排序方法。
我们常见的列表排序方法有list.sort(),但通常我们只使用它用来升序以及降序排列,但是这个方法本身是带其他参数的,如菜鸟教程所写的这样https://www.runoob.com/python/att-list-sort.htmlleetcode刷题#day7_第2张图片
python list有三个参数,在这个地方我们主要用到的是第一个参数cmp,也就是按照我们想要的方式进行排序。
【原本升序降序也是一种排序方式,相当于比较两个数的大小,那这个地方我们根据题目意思,不能拆分原来的数,则代表比较 ‘a’ + ‘b’ 与 ‘b’ + 'a’谁大即可】

def cmp(x,y):
	return 1 if x+y<y+x else -1
nums.sort(key=cmp_to_key(cmp))

那这个地方cmp_to_key又是什么功能呢,这个主要是因为python3已经没有python2中的cmp方法了,python3中更新为cmp_to_key方法。
leetcode刷题#day7_第3张图片
对应的描述链接为:https://docs.python.org/3/library/functools.html#functools.cmp_to_key
那么给定a = ‘21’ , b = ‘4’ , a + b = ‘214’ < ‘421’ = b + a ,我们可以根据这一点来规定排序方法,即当我们cmp函数返回正数时,交换两元素。【升序排序的思想】
所以最终结果如下:

class Solution:
    def largestNumber(self, nums: List[int]) -> str:
        def cmp(x,y):
            return 1 if x+y<y+x else -1
        nums=list(map(str,nums))
        nums.sort(key=cmp_to_key(cmp))
        res= str(int("".join(nums)))
        return res

你可能感兴趣的:(leetcode,python,docker,python,深度学习)