题目描述
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
示例1
输入: [3,32,321]
返回值:“321323”
解题思路
对于本题,我们需要将数组中的数组按照特定规则排序。假设对于数组中的两个数字:num1和num2,例如,3和32, 如果3在32的前面,则组合数为332,如果32在3的前面,则组合数为323,323小于332,则应该将32放在3的前面。代码如下:
package com.jz.day1108;
import java.util.*;
import java.util.stream.Collectors;
public class PrintMinNumber_JZ {
/**
* 把数组排列成最小的数
* @param numbers
* @return
*/
public static String PrintMinNumber(int[] numbers) {
if (numbers == null || numbers.length == 0) {
return "";
}
// 需要将数组转换成列表
List<Integer> list = Arrays.stream(numbers).boxed().collect(Collectors.toList());
list.sort((Comparator<Object>) (o1, o2) -> {
String num1 = String.valueOf(o1) + o2;
String num2 = String.valueOf(o2) + o1;
return Integer.parseInt(num1) - Integer.parseInt(num2);
});
System.out.println(list);
StringBuilder sb = new StringBuilder();
for (int i : list) {
sb.append(i);
}
return sb.toString();
}
public static void main(String[] args) {
int[] number = new int[]{3, 32, 321};
System.out.println(PrintMinNumber(number));
}
}
补充
java中整型数组和列表互相转换的写法如下:
public static void main(){
int[] array = {1, 2, 5, 5, 5, 5, 6, 6, 7, 2, 9, 2};
/*int[]转list*/
//方法一:需要导入apache commons-lang3 jar
List<Integer> list = Arrays.asList(ArrayUtils.toObject(array));
//方法二:java8及以上版本
List<Integer> list1 = Arrays.stream(array).boxed().collect(Collectors.toList());
/*list转int[]*/
//方法一:
Integer[] intArr = list.toArray(new Integer[list.size()]);
//方法二:java8及以上版本
int[] intArr1 = list.stream().mapToInt(Integer::valueOf).toArray();
}