輸入一個正整數數組,把數組裏所有數字拼接起來排成一個數,打印能拼接出的所有數字中最小的一個。例如輸入數組{3,32,321},則打印出這三個數字能排成的最小數字爲321323。
思路:轉化爲String類型的數組,然後排序
排序方法,s1+s2 和s2 + s1誰大誰往前
如果不轉化形態的話,需要不斷判斷大小,比較複雜
直接放代碼了:
public String PrintMinNumber(int[] numbers) {
if (numbers == null || numbers.length == 0)
return "";
int n = numbers.length;
String[] nums = new String[n];
for (int i = 0; i < n; i++)
nums[i] = numbers[i] + "";
Arrays.sort(nums, (s1, s2) -> (s1 + s2).compareTo(s2 + s1));
String ret = "";
for (String str : nums)
ret += str;
return ret;
}
代碼中的難點在於Arrays.sort(),這個函數經常用,單關鍵在於實現了自定義地排序
由上圖可知,可以自定義排序規則,
那行代碼解讀爲,Array.sort對num排序,排序方法,s1,s2兩個參數,根據s1+s2與s2+s1大小排序。