179. 最大数

https://leetcode-cn.com/problems/largest-number/

解法一:两两排序

[10,2],有两种顺序:102,210,后者(颠倒顺序)大,因此设计一种字符排序,当两数组合,按结果较大的顺序排列。依次类推,对所有数这样两两比较排序,就能保证每两个数的位置都是结果最大的,则全局最大。

若是求最小数,则相反。

#注意与py2的区别,sorted中自定义比较函数,参数用key,自定义函数要用functools转换
import functools  
class Solution:
    def largestNumber(self, nums: List[int]) -> str:
        #排除全为0的干扰
        if not any(nums):
            return "0"
        strs = []
        #转成字符
        for i in nums:
            strs.append(str(i))
        #排序,规则是若s1,s2交换后结果更大,排前面(取1),否则为-1,不变为0
        #数字字符串的比较也是按数值大小进行
        s = sorted(strs, key = functools.cmp_to_key(lambda s1, s2: -1 if s1+s2 > s2+s1 else(1 if s1+s2 < s2+s1 else 0)))
        return "".join(s)

最后更新于