題目:輸入一個正整數數組,把數組里所有數字拼接起來排成一個數,打印能拼接出的所有數字中最小的一個。例如輸入數組{3,32,321},則打印出這三個數字能排成的最小數字為321323。
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
public class Solution {
public String PrintMinNumber(int [] numbers) {
int n;
StringBuilder string = new StringBuilder();
ArrayList<Integer> list = new ArrayList<>();
n = numbers.length;
for(int i=0; i < n; i++){
list.add(numbers[i]);
}
Collections.sort(list, new Comparator<Integer>(){
@Override
public int compare(Integer str1, Integer str2){
String s1 = str1 + "" + str2;
String s2 = str2 + "" + str1;
return s1.compareTo(s2);
}
});
for(int j : list){
string.append(j);
}
return string.toString();
}
}
將所有的數存到一個list里面,通過一個一個排序算法對所有成員進行排序。
這個排序算法這里引用了Collection的sort方法,并自定義了一個比較器,雖然有一點投機取巧的意思,但是按照分別通過將兩個數字組成前后順序互換的兩個新數字這種比較方法去實現排序算法也是很簡單的。