1. 程式人生 > >leetcode 179 最大數

leetcode 179 最大數

給定一組非負整數,重新排列它們的順序使之組成一個最大的整數。

示例 1:

輸入: [10,2]
輸出: 210

示例 2:

輸入: [3,30,34,5,9]
輸出: 9534330

說明: 輸出結果可能非常大,所以你需要返回一個字串而不是整數。

解題思路:

和普通的排序不一樣的是,不是比較數或者字串的大小,而是比較拼接後字串的大小。

python3實現:

from functools import cmp_to_key
def largestNumber(nums):
    num_to_str = [str(i)for i in nums]
    num_to_str.sort(key=cmp_to_key(lambda a, b: (int(a + b) > int(b + a)) - (int(a + b) < int(b + a))), reverse=True)
    return '0' if num_to_str[0] == '0' else ''.join(num_to_str)

python3比python2少了cmp引數,用com_to_key可以完成相應的功能。

from functools import cmp_to_key

nums = [1, 3, 2, 4]
nums.sort(key=cmp_to_key(lambda a, b: a - b))
print(nums)  # [1, 2, 3, 4]