题目描述
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{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();
}
}
京公网安备 11010502036488号