JZ45 把數組排成最小的數 描述 輸入一個非負整數數組numbers,把數組裡所有數字拼接起來排成一個數,列印能拼接出的所有數字中最小的一個。 例如輸入數組[3,32,321],則列印出這三個數字能排成的最小數字為321323。 1.輸出結果可能非常大,所以你需要返回一個字元串而不是整數 2.拼接 ...
JZ45 把數組排成最小的數
描述
輸入一個非負整數數組numbers,把數組裡所有數字拼接起來排成一個數,列印能拼接出的所有數字中最小的一個。
例如輸入數組[3,32,321],則列印出這三個數字能排成的最小數字為321323。
1.輸出結果可能非常大,所以你需要返回一個字元串而不是整數
2.拼接起來的數字可能會有前導 0,最後結果不需要去掉前導 0
具體做法
step 1:優先判斷空數組的特殊情況。
step 2:將數組中的數字元素轉換成字元串類型。
step 3:重載排序比較為字元串類型的x + y < y + x,然後進行排序。
step 4:將排序結果再按照字元串拼接成一個整體。
代碼
package mid.JZ45把數組排成最小的數;
import java.util.Arrays;
import java.util.Comparator;
public class Solution {
public String PrintMinNumber(int [] numbers) {
if(numbers == null || numbers.length == 0) {
return "";
}
String[] strArr = new String[numbers.length];
for (int i = 0; i < numbers.length; i++) {
strArr[i] = numbers[i] + "";
}
Arrays.sort(strArr, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
String s1 = o1 + o2;
String s2 = o2 + o1;
return s1.compareTo(s2);
}
});
StringBuilder res = new StringBuilder();
for (String s : strArr) {
res.append(s);
}
return res.toString();
}
}