劍指Offer【32】-- 將陣列排成最小的數
阿新 • • 發佈:2020-12-27
技術標籤:劍指offer演算法資料結構java劍指劍指Offer
題目描述
輸入一個正整數陣列,把數組裡所有數字拼接起來排成一個數,列印能拼接出的所有數字中最小的一個。例如輸入陣列{3,32,321},則打印出這三個數字能排成的最小數字為321323。
示例1
輸入
[3,32,321]
返回值
“321323”
解答
這道題要求拼起來的數是最小的數字,其實是一個排序問題,只要理解了這一點,就可以快速解決。
假設有兩個字串s1=3
,s2=32
,那s1+s2=332
,s2+s1=323
,也就是s1+s2>s2+s1
。
像上面這種情況,要想拼接起來的數最小,肯定是s2
在前面,s1
而在陣列中,我們要使所有的拼接起來是最小,則需要兩兩比較,類似排序,把滿足s1+s2>s2+s1
的s1
放到後面,s2
放到前面。
而排序演算法有很多種,我們直接呼叫API的,如果使用冒泡就是O(n2),內建的函式是O(NlogN),最差的時候是O(n2)。
import java.util.ArrayList;
import java.util.Arrays;
public class Solution {
public String PrintMinNumber(int [] numbers) {
String[] strs = new String[numbers. length];
for(int i = 0; i < numbers.length; i++)
strs[i] = String.valueOf(numbers[i]);
Arrays.sort(strs, (x, y) -> (x + y).compareTo(y + x));
StringBuilder res = new StringBuilder();
for(String s : strs)
res.append(s);
return res. toString();
}
}
當然,要是自己實現排序演算法也是完全ok的。
【作者簡介】:
秦懷,公眾號【秦懷雜貨店】作者,技術之路不在一時,山高水長,縱使緩慢,馳而不息。這個世界希望一切都很快,更快,但是我希望自己能走好每一步,寫好每一篇文章,期待和你們一起交流。
此文章僅代表自己(本菜鳥)學習積累記錄,或者學習筆記,如有侵權,請聯絡作者核實刪除。人無完人,文章也一樣,文筆稚嫩,在下不才,勿噴,如果有錯誤之處,還望指出,感激不盡~