Leetcode 最大數 Python實現

2021-09-27 10:28:41 字數 1161 閱讀 5218

題目:最大數

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

示例:

輸入: [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....