《劍指offer》系列 把陣列排成最小的數(Java)
阿新 • • 發佈:2018-11-25
連結
牛客:把陣列排成最小的數
題目描述
輸入一個正整數陣列,把數組裡所有數字拼接起來排成一個數,列印能拼接出的所有數字中最小的一個。例如輸入陣列{3,32,321},則打印出這三個數字能排成的最小數字為321323。
思路
1、全排列
求出陣列中所有數字的全排列,然後把每個全排列拼起來,求出拼出來的數字的最大值。
2、定義新的排序規則
如果兩個數字m,n拼接成mn和nm,如果mn<nm,那麼m應該排在n的前面,我們定義此時m小於n,如果mn=nm,我們定義m等於n。
可以考慮將數字轉成字串,一來防止數字拼接時的溢位,二來字串的拼接和比較容易實現。
由於把數字m和n拼接起來得到mn和nm,它們的位數一定是相同的,因此比較它們的大小隻需按照字串大小的比較規則即可。
程式碼
import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; public class Solution { public String PrintMinNumber(int [] numbers) { int len = numbers.length; String []str = new String[len]; for(int i=0; i<len; i++){ str[i] = String.valueOf(numbers[i]); } StringBuffer sb = new StringBuffer(); Arrays.sort(str, new Comparator<String>(){ @Override public int compare(String s1, String s2) { // TODO Auto-generated method stub String c1 = s1+s2; String c2 = s2+s1; return c1.compareTo(c2); } }); for(int i=0; i<len; i++){ sb.append(str[i]); } return sb.toString(); } }