题目描述

输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。

代码一

分析
通过一个比较器来自定义排序方式

  1. public class Solution {
  2. public static void main(String[] args) {
  3. int[] arr = new int[]{3,32,321};
  4. System.out.println(PrintMinNumber(arr));
  5. }
  6. public static String PrintMinNumber(int [] numbers) {
  7. String s="";
  8. ArrayList<Integer> list = new ArrayList<Integer>();
  9. for(int i=0;i<numbers.length;i++)
  10. {
  11. list.add(numbers[i]);
  12. }
  13. Collections.sort(list, new Comparator<Integer>(){
  14. @Override
  15. public int compare(Integer o1, Integer o2) {
  16. String str1 = o1+""+o2;
  17. String str2 = o2+""+o1;
  18. return str1.compareTo(str2);
  19. }
  20. });
  21. for(int n:list)
  22. {
  23. s+=n;
  24. }
  25. return s;
  26. }
  27. }