給定一組非負整數,重新排列它們的順序使之組成乙個最大的整數。
示例 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介面,...