Given a list of non-negative integers nums
, arrange them such that they form the largest number and return it.
Since the result may be very large, so you need to return a string instead of an integer.
Example 1:
Input: nums = [10,2]
Output: "210"
Example 2:
Input: nums = [3,30,34,5,9]
Output: "9534330"
Constraints:
1 <= nums.length <= 100
0 <= nums[i] <= 109
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
class LargeNumKey(str):
def __lt__(x, y):
return x+y > y+x
class Solution:
def largestNumber(self, nums: List[int]) -> str:
num = ''.join(sorted(
map(str, nums),
key=LargeNumKey))
return '0' if num[0] == '0' else num
'''
Using `cmp_to_key`
'''
from functools import cmp_to_key
class Solution:
def largestNumber(self, nums: List[int]) -> str:
def cmp(x, y):
return -1 if x+y > y+x else 1
num = ''.join(sorted(
map(str, nums),
key=cmp_to_key(cmp)))
return '0' if num[0] == '0' else num
|