每日演算法之把陣列排成最小的數
阿新 • • 發佈:2022-12-12
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(); } }