leetcode回顾——[179] Largest Number

题目

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 + yy + 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