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

2022-03-06 11:25:10 字數 1536 閱讀 3673

劍指offer

contents

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

示例 1:

輸入: [10,2]

輸出: "102"

示例 2:

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

輸出: "3033459"

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

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

需要定義一種特殊的比較規則,根據這種比較規則對數字進行排序,然後將排序後的數字重新拼接起來,就得到最小數字。

比較規則:

兩個數字x,y按照字串拼接的形式,可以拼成x+y,y+x,比較這兩個拼接數字的大小,如果x+y > y+x,判斷為x>y,即a應該靠後;反之同理。

如圖

class

solution

//利用string物件的compareto方法,指定sort函式當中的比較規則

arrays.sort(strarray, (str1, str2) -> (str1 + str2).compareto(str2 + str1));

//將排序好的陣列組合成字串

stringbuilder res = new stringbuilder();

for(string str:strarray)

return res.tostring();}}

public static void sort(t a,comparator super t> c)這是arrays.sort()方法的一種形式。

此函式可以實現自定義的比較器,來比較任意型別t組成的陣列。

以下是文件內容:

string型別的compareto函式

以下是compareto()函式的文件,說明上述**的正確性,對於表示數字的字串,直接用compareto()函式即可比較出字串表示的數字的大小關係。

劍指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哪個應...