leetcode 179. 最大數 解題報告

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

示例 1:函數

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

示例 2:測試

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

說明: 輸出結果可能很是大,因此你須要返回一個字符串而不是整數。code

這道題目很是有意思。讀完題以後,咱們能夠獲得一個初步的方案:因爲不管怎麼排,最佳的方案確定是會把全部的數字所有用上。因此,若是字典序越大的,獲得的數值也會越大。只須要儘量的讓字典序大的數字處於儘量高的位置便可。那麼一個初步的實現方案以下排序

class Solution:
    def largestNumber(self, nums):
        """
        :type nums: List[int]
        :rtype: str
        """
        result = ''.join(sorted(map(str, nums), reverse=True))
        return result

看起來不錯,可是卻沒法經過該題的全部測試。下面給出一個反例,['30', '3'],排序以後獲得的是’303‘而不是’330‘。受此啓發,咱們假設有兩個字符串a,b。咱們只要判斷a+b大仍是b+a大,大的排在前面便可。那麼剛剛咱們的反例能夠順利經過了。ip

因而,一個能夠經過全部測試樣例的代碼便有了文檔

from functools import cmp_to_key


def cmp(a, b):
    if a + b > b + a:
        return 1
    elif a + b < b + a:
        return -1
    else:
        return 0




class Solution:
    def largestNumber(self, nums):
        """
        :type nums: List[int]
        :rtype: str
        """
        result = ''.join(sorted(map(str, nums), key=cmp_to_key(cmp), reverse=True))
        return result[:-1].lstrip('0') + result[-1]

這裏涉及到了Python3 sorted函數自定義比較函數的知識點,在Python3中,sorted方法撤銷掉了原有的cmp參數,因此要進行這樣的排序操做更加複雜了。有關此知識點的更加詳盡的說明請查閱相關文檔。字符串

相關文章
相關標籤/搜索