import java.util.Collections;
import java.util.Comparator;
/*輸入一個正整數數組,把數組裏所有數字拼接起來排成一個數,打印能拼接出的所有數字中最小的一個。例如輸入數組{3,32,321},則打印出這三個數字能排成的最小數字爲321323。*/
public static String PrintMinNumber(int [] numbers) {
int n;
String s="";
ArrayList<Integer> list=new ArrayList<Integer>();
n=numbers.length;
for(int i=0;i<n;i++){
list.add(numbers[i]);//將數組放入arrayList中
}
//實現了Comparator接口的compare方法,將集合元素按照compare方法的規則進行排序
/*Collections.sort(list, new PriceComparator());的第二個參數返回一個int型的值,就相當於一個標誌,
告訴sort方法按什麼順序來對list進行排序。compare(a,b)方法:根據第一個參數小於、等於或大於
第二個參數分別返回負整數、零或正整數。*/
/*Java中String類有一個compareTo方法,該方法返回一個int類型的數據。其比較規則是:
拿出字符串的第一個字符與參數的第一個字符進行比較,如果兩者不等,比較結束,返回兩者的ascii差,
即字符串的第一個字符減去參數的第一個字符的ascii碼值,比如代碼第五行的-1.如果相等,則比較第二個字符,以此類推。
比較到最後還是相等的,方法返回值爲0。
這裏有一點需要注意:如果兩個字符串的長度不同,並且一個字符串與另一個字符串的前面N個字符相等,
那麼這個方法返回返回兩個字符串長度之差。比如代碼第七行返回值爲3.
舉例如下:
String s1 = "abcd";
String s2 = "abce";
String s3 = "Abc";
String s4 = "abcdefg";
System.out.println(s1.compareTo(s2));
System.out.println(s1.compareTo(s3));
System.out.println(s4.compareTo(s1));
System.out.println(s4.compareTo(s2));
輸出:-1 32 3 -1*/
Collections.sort(list,new Comparator<Integer>(){
public int compare(Integer o1, Integer o2) {
// TODO Auto-generated method stub
String s1 = o1+""+o2;
String s2 = o2+""+o1;
return s1.compareTo(s2);
}
});
for(int j:list){
s+=j;
}
return s;
}
public static void main(String args[]){
int[] a = {3,32,321};
String s = PrintMinNumber(a);
System.out.println(s);
}
}