【问题】
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
【解决】与leetcode中的Largest Number类似。
重载数组的比较器,判断两个数拼接之后的大小,根据这个排序,之后拼接字符串即可
import java.util.Arrays;
import java.util.Comparator;
public class Solution {
public static void main(String[] args){
int[] numbers = {3,32,321};
String res = PrintMinNumber(numbers);
System.out.println(res);
}
public static String PrintMinNumber(int [] numbers) {
if (numbers == null || numbers.length == 0) return "";
String[] tmp = new String[numbers.length];
for (int i = 0;i < numbers.length;i ++){
tmp[i] = String.valueOf(numbers[i]);
}
Arrays.sort(tmp, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
String ab = o1.concat(o2);
String ba = o2.concat(o1);
return ab.compareTo(ba);
}
});
StringBuilder sb = new StringBuilder();
for (int i = 0;i < tmp.length;i ++){
sb.append(tmp[i]);
}
int i = 0;
String res = sb.toString();
while(i < res.length() && res.charAt(0) == 0 ){
i ++;
}
if (i == res.length()) return "0";
return res;
}
}