在上一节python sorted, sort函数自定义排序规则中,我们已经讲了一些关于自定义sorted函数的一些用法,今天来看一个终极绝杀,操作简直是让人欲罢不能。
先来看一下背景,就是解决这个题目。链接
然后我看到了一个写法,是怎么写的呢?
class Compare(str):
def __lt__(x,y):
return x+y<y+x
class Solution:
def largestNumber(self, nums: List[int]) -> str:
largest_num=''.join(sorted(map(str,nums),key=Compare,reverse=True))
return '0' if largest_num[0]=='0' else largest_num
只能说太牛了,关于实现细节,我也只会这么几点:
1)sorted函数执行的时候,调用Compare的时候,比如此时nums=[‘1’, ‘2’], 那么调用Compare传入的x=‘2’, y=‘1’,按照从后往前传值。
2)python的sort函数使用的timsort算法,感兴趣的可以搜一下这个算法。Java也是使用的这个算法。