把数组排成最小的数

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

分析:

 不能直接调用Arrays.sort,因为这里是整数int数组,而传入的比较器是Integer,不匹配,所以将数组存到list中

 * 排序规则如下:字符串拼接

 * 若ab > ba 则 a > b,

 * 若ab < ba 则 a < b,

 * 若ab = ba 则 a = b;

 * 解释说明:

 * 比如 "3" < "31"但是 "331" > "313",所以要将二者拼接起来进行比较。

题目要求最小的数,所以就是从小到大排序即可。

比较器原来返回值:正数,o1>o2,  为从小到大排序

现在还是从小到大,所以比较器返回正时,还是表示o1>o2,也就是o1o2>o2o1

代码:

package sort;

 

import java.util.ArrayList;

import java.util.Collections;

import java.util.Comparator;

 

public class Demo11 {

         public static void main(String[] args){

                   int[] a={3,32,321};

                   System.out.println(printArray(a));

         }

         public static String printArray(int[] a){

                  

                   ArrayList<Integer> list=new ArrayList<>();

                   for(int i=0;i<a.length;i++)

                            list.add(a[i]);

                  

                   Collections.sort(list, new Comparator<Integer>(){

 

                            @Override

                            public int compare(Integer o1, Integer o2) {

                                     String s1=o1+""+o2;

                                     String s2=o2+""+o1;

                                     return s1.compareTo(s2);

                            }

 

                  

                           

                   });

                  

                   StringBuilder sb=new StringBuilder();

                  

                   for(int i:list)

                            sb.append(i);

                  

                   return sb.toString();

                  

         }

        

}

原文地址:https://www.cnblogs.com/xiaolovewei/p/7922971.html