算法-把数组排成最小的数
输入一个正整数数组,把数组里所有数字拼接起排成一个数,打印能拼接出的所有数字中最小的一个。
例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
/**
核心思想是,比较a和b,把他们拼起来,ab和ba哪个大,如果a大于b,那么交换。
这样一遍循环,可以将最大的放到数组最后,多循环几次,就是我们想要的数组,输出即可。
*/
public static String PrintMinNumber(int[] numbers) {
for (int i = numbers.length; i > 0; i--) {
for (int j = 0; j < i - 1; j++) {
compareAndSwap(numbers, j, j + 1);
}
}
return toString(numbers);
}
private static void compareAndSwap(int[] n, int i, int j) {
Long ab = Long.valueOf(n[i] + "" + n[j]);
Long ba = Long.valueOf(n[j] + "" + n[i]);
if (ab > ba) {
n[i] = n[i] ^ n[j];
n[j] = n[i] ^ n[j];
n[i] = n[i] ^ n[j];
}
}
private static String toString(int[] numbers) {
StringBuilder b = new StringBuilder();
for (int number : numbers) {
b.append(number);
}
return b.toString();
}