輸入乙個非負整數陣列,把陣列裡所有數字拼接起來排成乙個數,列印能拼接出的所有數字中最小的乙個。
示例 1:
輸入: [10,2]示例 2:輸出: 「102」
輸入: [3,30,34,5,9]通過在排序時傳入乙個自定義的 comparator 實現,重新定義 string 列表內的排序方法,若拼接 s1 + s2 > s2 + s1,那麼顯然應該把 s2 在拼接時放在前面,以此類推,將整個 string 列表排序後再拼接起來。輸出: 「3033459」
public string minnumber
(int
nums)
/** * 解答:通過在排序時傳入乙個自定義的 comparator 實現,
* 重新定義 string 列表內的排序方法,若拼接 s1 + s2 > s2 + s1,
* 那麼顯然應該把 s2 在拼接時放在前面,以此類推,將整個 string 列表排序後再拼接起來。
* */
//比較list中每兩兩元素的組合,組合得到的數越小,越是將其放在前面,**如下:
strlist.
sort
((s1,s2)
->
(s1+s2)
.compareto
(s2+s1));
stringbuilder sb=
newstringbuilder()
;for
(string str : strlist)
return sb.
tostring()
;}
public string minnumber2
(int
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哪個應...