Description
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
Solution
Python3
class Solution:
def largestNumber(self, nums: List[int]) -> str:
if not any(nums):
return "0"
def compare(a, b):
if a + b > b + a:
return -1 # a should come before b
elif a + b < b + a:
return 1 # b should come before a
else:
return 0 # a and b are equal
s = list(map(str, nums))
s.sort(key = cmp_to_key(compare))
return "".join(s)
Python
import functools
class Solution:
def largestNumber(self, nums):
compare = lambda a, b: 1 if a+b > b+a else -1 if a+b < b+a else 0
_nums = list(map(str, nums))
_nums.sort(key=functools.cmp_to_key(compare), reverse=True)
return str(int(''.join(_nums)))