把陣列排成最小的數
阿新 • • 發佈:2018-12-09
題目描述
輸入一個正整數陣列,把數組裡所有數字拼接起來排成一個數,列印能拼接出的所有數字中最小的一個。例如輸入陣列{3,32,321},則打印出這三個數字能排成的最小數字為321323。
/* 解題思路: * 先將整型陣列轉換成String陣列,然後將String陣列排序,最後將排好序的字串陣列拼接出來。關鍵就是制定排序規則。 * 排序規則如下: * 若ab > ba 則 a > b, * 若ab < ba 則 a < b, * 若ab = ba 則 a = b; * 解釋說明: * 比如 "3" < "31"但是 "331" > "313",所以要將二者拼接起來進行比較 */
import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; public class Solution { public String PrintMinNumber(int [] numbers) { int n; //String s=""; StringBuffer sb = new StringBuffer(); ArrayList<Integer> list= new ArrayList<Integer>(); n=numbers.length; for(int i=0;i<n;i++){ list.add(numbers[i]); } //構造比較器 Collections.sort(list, new Comparator<Integer>(){ public int compare(Integer str1,Integer str2){ String s1=str1+""+str2; String s2=str2+""+str1; return s1.compareTo(s2); } }); for(int j:list){ sb.append(String.valueOf(j)); } return sb.toString(); } }