面试题45:把数组排成最小的数
题目:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如:输入数组{3, 32, 321},则打印出这 3 个数字能排成的最小数字 321323。
思路:定义一个比较器,比较 str1+str2 和 str2+str1 哪个小。取小的那种方式。
代码实现:
package Question45;
import java.util.*;
public class T01 {
public static void main(String[] args) {
int[] arr = {2,3,1};
System.out.println(solve(arr));
}
public static String solve(int[] arr) {
// String c = Arrays.stream(arr).boxed().map(i -> String.valueOf(i)).sorted((a, b)-> (a+b).compareTo(b+a)).collect(Collectors.joining(""));
List<String> list = new ArrayList<>();
for (int data : arr) list.add(String.valueOf(data));
Collections.sort(list, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return (o1 + o2).compareTo(o2 + o1);
}
});
String result = "";
for (String data : list) result += data;
return result;
}
}