45-把数组排成最小的数
小于 1 分钟
输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。
把数组中的元素排成最小的数字,那么需要有个规则判断元素的先后顺序。
比如 3 32,可以排成 332 323 ,那么显然我们可以判断出来 323 < 332 。
所以 我们可以将两个数字m n 排成mn nm ,判断mn nm的大小,这样对数组排序。
实质上这道题是需要我们找到一个排序的规则。
清楚了排序规则,代码就好写了。
public String minNumber(int[] nums) {
if (nums == null || nums.length == 0) {
return "";
}
List<Integer> data = Arrays.stream(nums).boxed().collect(Collectors.toList());
Collections.sort(data, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return (o1 + "" + o2).compareTo(o2 +""+ o1);
}
});
StringBuilder sb = new StringBuilder();
data.forEach( k -> {sb.append(k);});
return sb.toString();
}