179 Largest Number

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