1. 程式人生 > >把陣列排成最小的數

把陣列排成最小的數

題目描述

輸入一個正整數陣列,把數組裡所有數字拼接起來排成一個數,列印能拼接出的所有數字中最小的一個。例如輸入陣列{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();

    }
}