/**
* 把数组排成最小的树
*
* 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},
* 则打印出这三个数字能排成的最小数字为321323。
*/
public class JZ032PrintMinNumber {
public static String PrintMinNumber(int [] numbers) {
if (numbers == null || numbers.length <= 0) {
return "";
}
for (int i = 0; i < numbers.length; i++) {
for (int j = i + 1; j < numbers.length; j++) {
if (compare(numbers[i], numbers[j]) > 0) {
int tmp = numbers[i];
numbers[i] = numbers[j];
numbers[j] = tmp;
}
}
}
StringBuilder str = new StringBuilder(new String(""));
for (int num : numbers) {
System.out.println(num);
str.append(num);
}
return str.toString();
}
public static String PrintMinNumber2(int[] numbers) {
if (numbers == null || numbers.length <= 0) {
return "";
}
StringBuffer sb = new StringBuffer();
int j = 0;
for (int i = 1; i < numbers.length; i++) {
int tmp = numbers[i];
for (j = i; j > 0 && compare(tmp, numbers[j - 1]) < 0; j--) {
numbers[j] = numbers[j - 1];
}
numbers[j] = tmp;
}
for (int num : numbers) {
sb.append("" + num);
}
return sb.toString();
}
private static int compare(int a, int b) {
String s1 = "" + a + b;
String s2 = "" + b + a;
return s1.compareTo(s2);
}
public static void main(String[] args) {
int[] numbers = {32,3,321};
System.out.println(PrintMinNumber(numbers));
}
/*
将各个元素从小到大进行排序,排序之后再把他们串联起来就可以了,简直是非常的机智,非常的完美呀
*/
}