leetcode 179 最大數 解題報告

2022-03-05 08:53:27 字數 1321 閱讀 1764

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

示例 1:

輸入: [10,2]

輸出: 210

示例 2:

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

輸出: 9534330

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

這道題目非常有意思。讀完題之後,我們可以得到乙個初步的方案:由於無論怎麼排,最佳的方案肯定是會把所有的數字全部用上。所以,如果字典序越大的,得到的數值也會越大。只需要盡可能的讓字典序大的數字處於盡可能高的位置即可。那麼乙個初步的實現方案如下

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大,大的排在前面即可。那麼剛剛我們的反例可以順利通過了。

於是,乙個可以通過所有測試樣例的**便有了

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引數,所以要進行這樣的排序操作更加複雜了。有關此知識點的更加詳盡的說明請查閱相關文件。

leetcode 179 題 最大數

leetcode 179 題 題目 最大數 題目描述 給定一組非負整數,重新排列它們的順序使之組成乙個最大的整數。示例 1 輸入 10,2 輸出 210 示例 2 輸入 3,30,34,5,9 輸出 9534330 說明 輸出結果可能非常大,所以你需要返回乙個字串而不是整數。解決思路 arrays....

LeetCode 179 最大數(排序)

給定一組非負整數,重新排列它們的順序使之組成乙個最大的整數。示例 1 輸入 10,2 輸出 210 示例 2 輸入 3,30,34,5,9 輸出 9534330 說明 輸出結果可能非常大,所以你需要返回乙個字串而不是整數。需要將傳入的陣列,按照指定的規則進行排序,最後再將排序陣列中的元素從頭到尾,新...

leetcode筆記 179最大數

題目 給定一組非負整數,重新排列它們的順序使之組成乙個最大的整數。示例 1 輸入 10,2 輸出 210示例 2 輸入 3,30,34,5,9 輸出 9534330說明 輸出結果可能非常大,所以你需要返回乙個字串而不是整數。本題的思路是首先將整數陣列轉化為字串陣列,然後使用comparator介面,...