题目描述
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
示例1
输入
[3,32,321]
返回值
"321323"
解题思路
自定义比较器-比较两个数拼接之后的大小来确定元素的位置
注意点:Collections.sort(list,comparator)中,比较器需要自己,但是比较器针对的是封装类,所以需要将int转换为包装类的list
Java代码
import java.util.*; public class Solution { // public String PrintMinNumber(int [] numbers) { // String ans=""; // if(numbers.length==0) return ans; // //quicksort(numbers,0,numbers.length); // MyComparator mycmp=new MyComparator(); // List<Integer> list = new ArrayList<Integer>(); // for (int i : numbers) { // list.add(i); // } // Collections.sort(list,mycmp); // StringBuilder sb = new StringBuilder(); // for (Integer val : list) { // sb.append(val); // } // return sb.toString(); // } // private class MyComparator implements Comparator<Integer> { // @Override // public int compare(Integer a, Integer b) { // String s1=String.valueOf(a); // String s2=String.valueOf(b); // String A=s1+s2; // String B=s2+s1; // return A.compareTo(B); // } // } public String PrintMinNumber(int [] numbers) { String ans=""; if(numbers.length==0) return ans; //quicksort(numbers,0,numbers.length); List<Integer> list = new ArrayList<Integer>(); for (int i : numbers) { list.add(i); } //比较器的数据类型需要为包装类 Collections.sort(list,new Comparator<Integer>(){ @Override public int compare(Integer a, Integer b) { String s1=String.valueOf(a); String s2=String.valueOf(b); String A=s1+s2; String B=s2+s1; return A.compareTo(B); } }); StringBuilder sb = new StringBuilder(); for (Integer val : list) { sb.append(val); } return sb.toString(); } }