劍指 Offer 45 把陣列排成最小的數

2021-10-09 19:08:11 字數 909 閱讀 3255

輸入乙個非負整數陣列,把陣列裡所有數字拼接起來排成乙個數,列印能拼接出的所有數字中最小的乙個。

示例 1:

輸入: [10,2]

輸出: "102"

示例 2:

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

輸出: "3033459"

1.暴力,有點氣泡排序思想的感覺,一次確定乙個最小的數,只不過這個數的確定方式是什麼呢,一種可以考慮的方式是這個數和另乙個數做乙個組合觀察其放在前面還是後面即可判斷!

2.自定義排序,本質就是抽象的乙個排序需求,自己定義排序規則即可

class solution:

def minnumber(self, nums: list[int]) -> str:

nums=list(map(str,nums))

for i in range(len(nums)):

for j in range(i+1,len(nums)):

if nums[i]+nums[j]>nums[j]+nums[i]:

nums[i],nums[j]=nums[j],nums[i]

return ''.join(nums)

class solution:

def minnumber(self, nums: list[int]) -> str:

nums=list(map(str,nums))

def helper(x,y):

a,b=x+y,y+x

if a>b:return 1

elif aelse:return 0

nums.sort(key=functools.cmp_to_key(helper))

return ''.join(nums)

劍指offer 45 把陣列排成最小的數

輸入乙個正整數陣列,把陣列裡所有數字拼接起來排成乙個數,列印能拼接出的所有數字中最小的乙個。例如輸入陣列,則列印出這三個數字能排成的最小數字為321323。思路1 根據全排列,將三個數字的全排列全寫出來,然後比較大小,這種辦法在數比較多時,效率不高。思路2 先比較前兩個數字m和n排列的大小 mn和n...

劍指Offer 45 把陣列排成最小的數

輸入乙個正整數陣列,把陣列裡所有數字拼接起來排成乙個數,列印能拼接出的所有數字中最小的乙個。例 輸入陣列,列印321323。排列出所有的組合,比較出最小的,輸出。時間複雜度 o n 空間複雜度 o n 考察最小組合的形式,遵從下面的規律 1 首位小的靠前 2 首位相同,次位小的靠前 3 位數少的靠前...

把陣列排成最小的數(劍指offer 45)

輸入乙個正整數陣列,把陣列裡所有的數拼接為乙個數,列印出能拼接出的所有數字中最小的乙個。比如輸入 輸出 321323.這道題其實是希望我們能找到乙個排序規則,陣列根據這個排序規則排列後能排成乙個最小的數。要確定排序規則,就要比較兩個數字,也就是給出兩個數字m n,我們需要確定乙個規則判斷m和n哪個應...