给定一组非负整数,重新排列它们的顺序使之组成一个最大的整数。
示例 1:
输入:[10,2]
输出:210
示例 2:
输入:[3,30,34,5,9]
输出:9534330
说明: 输出结果可能非常大,所以你需要返回一个字符串而不是整数。
解题思路:
和普通的排序不一样的是,不是比较数或者字符串的大小,而是比较拼接后字符串的大小。
python3实现:
from functools import cmp_to_key
def largestNumber(nums):num_to_str = [str(i)for i in nums]num_to_str.sort(key=cmp_to_key(lambda a, b: (int(a + b) > int(b + a)) - (int(a + b) < int(b + a))), reverse=True)return '0' if num_to_str[0] == '0' else ''.join(num_to_str)
python3比python2少了cmp参数,用com_to_key可以完成相应的功能。
from functools import cmp_to_keynums = [1, 3, 2, 4]
nums.sort(key=cmp_to_key(lambda a, b: a - b))
print(nums) # [1, 2, 3, 4]