题目描述
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
解决方案
首先将int类型转换成字符串,然后排序,排序依据是如果a+b>b+a,那么a就排后面,反之亦然。这里利用比较器来实现。
代码
import java.util.*;
public class Solution {
public String PrintMinNumber(int [] numbers) {
List<Integer> NUM=new ArrayList<Integer>();
for(int i=0;i<numbers.length;i++) NUM.add(numbers[i]);
NumComparator comparator=new NumComparator();
Collections.sort(NUM, comparator);
String result="";
for(int i1:NUM){
result+=i1;
}
return result;
}
public class NumComparator implements Comparator<Integer>{
@Override
public int compare(Integer o1, Integer o2) {
String a=o1+"";
String b=o2+"";
return Integer.parseInt(a+b)-Integer.parseInt(b+a);
}
}
}