把数组排成最小的数(剑指offer-32)
题目描述
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
题目解析
先设置一种比较优先级排序,优先级为:将比较的两个元素拼接的两种结果去比较大小,然后由他们的大小关系去比较所拼接元素的优先级。
eg:输入数组{12,321},首先比较12321和32112的大小,然后根据这个大小去拼接字符串
题目解答
import java.util.*;
public class Solution {
public String PrintMinNumber(int [] numbers) {
ArrayList<String> list = new ArrayList<>();
for(int x:numbers){
list.add(x+"");
}
list.sort((o1,o2)->{
String a1 = o1+o2;
String a2 = o2+o1;
return a1.compareTo(a2);
});
StringBuilder result = new StringBuilder();
for(String x:list){
result.append(x);
}
return result.toString();
}
}
Stay hungry,Stay foolish