题目
1 2 3 4 5 6 7 8 9 10 11
| 给定一组非负整数,重新排列它们的顺序使之组成一个最大的整数。
示例 1:
输入: [10,2] 输出: 210 示例 2:
输入: [3,30,34,5,9] 输出: 9534330 说明: 输出结果可能非常大,所以你需要返回一个字符串而不是整数。
|
解题思路
AC本题其实第一个例子就够用了,本题的关键是要实现一个比较函数,根据题目的要求去实现,而示例1就只有两个元素,刚好符合比较函数需要两个参数。这两个数有两种组合,要么102
,要么210
,如果对应到字符串线x、y,其实就是比较x + y
与y + x
,然后实现降序排列,将排列的结果合并成字符串即可
AC代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| class Solution: def largestNumber(self, nums): """ :type nums: List[int] :rtype: str """ import functools nums = [str(i) for i in sorted(nums, key=functools.cmp_to_key(self.myCompare))] print(nums) if nums[0] == nums[-1] and nums[len(nums) // 2] == '0': return "0" return ''.join(nums) def myCompare(self, x, y): a = str(x) + str(y) b = str(y) + str(x) for i in range(len(a)): if a[i] != b[i]: return ord(b[i]) - ord(a[i]) return 0
|