[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)