剑指Offer(Java版)第三十七题:输入一个正整数数组,把数组里所有数字拼接起来排成一个数, 打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321}, 则打印出这三个数字能排成的最小数字为321323。

/*
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,
打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},
则打印出这三个数字能排成的最小数字为321323。
*/

import java.util.*;

public class Class37 {

public String PrintMinNumber(int [] numbers){
if(numbers == null || numbers.length <= 0){
return "";
}
ArrayList<String> zuhe = new ArrayList<String>();
for(int number : numbers){
zuhe.add(String.valueOf(number));
}
Collections.sort(zuhe,new Comparator<String>(){
public int compare(String s1, String s2){
String a1 = s1 + s2;
String a2 = s2 + s1;
return a1.compareTo(a2);
}
});
StringBuilder s = new StringBuilder();
for(String str : zuhe){
s.append(str);
}
return s.toString();

}
public void test(){
int[] numbers = new int[]{3,32,321};
System.out.println(PrintMinNumber(numbers));
}

public static void main(String[] args) {
// TODO Auto-generated method stub
Class37 c = new Class37();
c.test();

}

}

posted on 2020-03-18 14:26  桌子哥  阅读(532)  评论(0编辑  收藏  举报