算法實現:
輸入一個正整數數組,然後輸出該數組中所有數字組成的最大數。
例如,[7,5,9,556,89,11]最大數爲9897556511
算法思想:
對數組按照自定義規則進行排序,在java中,我們可以使用Arrays.sort()方法,並且通過接口Comparator重新編寫排序的規則。
排序規則:
數字位數相同比較兩個數的第一位,誰大誰在前,要是第一位相同就比較第二位,依次類推。
數字位數不同就先補位,使兩個數字位數相同。然後比較。如:7和778比較,使7補位爲777,再比較。
代碼:
public class Algorithm3 {
public String test(int num[]){
String[] str = new String[num.length];
int i = 0;
for(int n : num){
str[i++] = n + "";
}
Arrays.sort(str,new Comparator<String>(){
@Override
public int compare(String o1, String o2) {
// TODO 自動生成的方法存根
int length1 = o1.toCharArray().length;//數字的位數
int length2 = o2.toCharArray().length;
StringBuilder s1 = new StringBuilder();//補位的數字
StringBuilder s2 = new StringBuilder();
//補位方法
for(int i=0;i<length2;i++){
s1.append(o1);
}
for(int i=0;i<length1;i++){
s2.append(o2);
}
return s2.toString().compareTo(s1.toString());
}
});
StringBuilder s = new StringBuilder();
for(String s3 : str){
s.append(s3);
}
return s.toString();
}
public static void main(String[] args){
int number[] = {7,5,9,556,89,11};
System.out.println("排序數組爲:");
for(int n : number){
System.out.print(n + " ");
}
System.out.println("");
Algorithm3 t = new Algorithm3();
System.out.println("最大數爲:" + t.test(number));
}
}
結果:
排序數組爲:
7 5 9 556 89 11
最大數爲:9897556511