題目:最大數
給定一組非負整數,重新排列它們的順序使之組成乙個最大的整數。
示例:
輸入: [10,2],輸出: 210
輸入: [3,30,34,5,9],輸出: 9534330
說明: 輸出結果可能非常大,所以你需要返回乙個字串而不是整數。
思路:通過對題目的分析,可以想到的是先比較每個元素的第乙個字元,然後第二個字元 . . . 以此類推,但是這無法解決 「3,30,34」 中「3」這種特殊情況。
參考網友提供的思路,這是乙個需要考慮 "權重" 的問題,此處的權重就是兩個元素a和b的排序帶來的不同,a+b和b+a的大小判斷。
解法1:
class solution(object):
def largestnumber(self, nums):
n = len(nums)
for i in range(n):
for j in range(n-i-1):
temp_1 = str(nums[j])
temp_2 = str(nums[j+1])
if(int(temp_1+temp_2)解法2#:通過cmp_to_key函式
class solution(object):
def largestnumber(self, nums):
""":type nums: list[int]
:rtype: str
"""# 為空校驗
if not nums:
return "0"
# 將陣列nums,轉換成字串列表nums
nums = list(map(str, nums))
from functools import cmp_to_key
# 定義函式cmp,用於判斷大小得到兩兩比較的數值結果
cmp = lambda a,b: 1 if a+b > b+a else -1 if a+b < b+a else 0
print(cmp)
nums.sort(key=cmp_to_key(cmp),reverse=true)
return str(int("".join(nums)))
參考: leetcode筆記 179最大數
題目 給定一組非負整數,重新排列它們的順序使之組成乙個最大的整數。示例 1 輸入 10,2 輸出 210示例 2 輸入 3,30,34,5,9 輸出 9534330說明 輸出結果可能非常大,所以你需要返回乙個字串而不是整數。本題的思路是首先將整數陣列轉化為字串陣列,然後使用comparator介面,...
LeetCode筆記 179 最大數
179.最大數 劍指 offer 45.把陣列排成最小的數 給定一組非負整數 nums,重新排列它們每個數字的順序 每個數字不可拆分 使之組成乙個最大的整數。注意 輸出結果可能非常大,所以你需要返回乙個字串而不是整數。示例 1 輸入 nums 10,2 輸出 210 示例 2 輸入 nums 3,3...
leetcode 179 題 最大數
leetcode 179 題 題目 最大數 題目描述 給定一組非負整數,重新排列它們的順序使之組成乙個最大的整數。示例 1 輸入 10,2 輸出 210 示例 2 輸入 3,30,34,5,9 輸出 9534330 說明 輸出結果可能非常大,所以你需要返回乙個字串而不是整數。解決思路 arrays....