【追求進步】把陣列排成最小的數
阿新 • • 發佈:2019-01-26
題目描述
輸入一個正整數陣列,把數組裡所有數字拼接起來排成一個數,列印能拼接出的所有數字中最小的一個。例如輸入陣列{3,32,321},則打印出這三個數字能排成的最小數字為321323。 線上程式碼:import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; public class Solution { public String PrintMinNumber(int [] numbers) { /*初步的想法是全排列,所有的全排列彼此比較大小。 根據排列的知識,n個數字總共有n!個排列; 第二種方法:即就是找到排序規則,陣列根據排序規則進行排序則就是最小的數字 即就是合併之後int溢位的隱患,因此把數字轉換成字串,比較它們的大小隻需要 按照字串大小的比較規則就可以了。 */ if(numbers==null||numbers.length==0){ return "";//如果數字是空的,則返回空 } int len=numbers.length; String[] str=new String[len];//字串陣列 StringBuilder sb=new StringBuilder(); for(int i=0;i<len;i++){ str[i]=String.valueOf(numbers[i]);//先將整型陣列轉換成String陣列 } Arrays.sort(str,new Comparator<String>(){ @Override public int compare(String s1, String s2) { String c1 = s1 + s2; String c2 = s2 + s1; return c1.compareTo(c2); //比如 "3" < "31"但是 "331" > "313",所以要將二者拼接起來進行比較 } });//將String陣列排序 for(int i=0;i<len;i++){ sb.append(str[i]);//將排好序的字串陣列拼接出來 } return sb.toString(); } /* * 解題思路: * 先將整型陣列轉換成String陣列,然後將String陣列排序,最後將排好序的字串陣列拼接出來。關鍵就是制定排序規則。 * 排序規則如下: * 若ab > ba 則 a > b, * 若ab < ba 則 a < b, * 若ab = ba 則 a = b; * 解釋說明: * 比如 "3" < "31"但是 "331" > "313",所以要將二者拼接起來進行比較 */ }