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

2021-10-06 08:06:54 字數 1112 閱讀 8160

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

示例 1:

輸入: [10,2]

輸出: 「102」

示例 2:

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

輸出: 「3033459」

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

拼接起來的數字可能會有前導 0,最後結果不需要去掉前導 0

python

class

solution

:def

minnumber

(self, nums: list[

int])-

>

str:

defsort_rule

(s1,s2)

:# 新的排序規則

if s1+s2 > s2+s1:

return

1elif s1+s2 < s2+s1:

return-1

else

:return

0

strs =

[str

(num)

for num in nums]

# 1.轉字串

strs.sort(key=functools.cmp_to_key(sort_rule)

)# 2.排序,注意制定新的排序規則

return

''.join(strs)

# 3.拼接字串

c++
class

solution

public

: string minnumber

(vector<

int>

& nums)

// 排序

sort

(strs.

begin()

, strs.

end(

), cmp)

;// 拼接字串

for(

int j=

0; jsize()

; j++

)return res;}}

;

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

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

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

輸入乙個正整數陣列,把陣列裡所有數字拼接起來排成乙個數,列印能拼接出的所有數字中最小的乙個。例如輸入陣列,則列印出這三個數字能排成的最小數字為321323。coding utf 8 classsolution defprintminnumber self numbers write code her...

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

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