剑指offer算法题
数组
题目描述
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
题目分析
自定义一个比较器,比较s1+s2的大小。
根据题意,比如我要比较s1,s2的顺序,可以利用自定义比较器比较s1s2和s2s1之间的大小,比较器默认升序排序。所以排序后的结果可以直接按顺序构造到result中。
下面是Java代码
import java.util.ArrayList;
import java.util.Comparator;
import java.util.Collections;
public class Solution {
public String PrintMinNumber(int [] numbers) {
String result = "";
if(numbers.length == 0){
return result;
}
if(numbers.length == 1){
result = Integer.toString(numbers[0]);
return result;
}
ArrayList<Integer> list = new ArrayList<>();
for(int i = 0 ; i < numbers.length ; i++){
list.add(numbers[i]);
}
Collections.sort(list,new Comparator<Integer>(){
public int compare(Integer str1 , Integer str2){
String s1 = str1+""+str2;
String s2 = str2+""+str1;
return s1.compareTo(s2);
}
});
for(int i:list){
result += i;
}
return result;
}
}