剑指Offer | 把数组排成最小的数

做了个剑指Offer的题目目录,链接如下:
https://blog.csdn.net/mengmengdastyle/article/details/80317246

一、题目

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

二、思路

(1) Collections.sort
Collections是一个工具类,sort是其中的静态方法,是用来对List类型进行排序的,它有两种参数形式,其中一个参数形式:
public static void sort(List list, Comparator

三、代码

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

public class FindMin {
    public static void main(String[] args) {
        int[] in = {3,321,32};
        PrintMinNumber(in);
    }
     public static String PrintMinNumber(int [] numbers) {
            int n;
            String s="";
            ArrayList<Integer> list=new ArrayList<Integer>();
            n=numbers.length;

            for(int i=0;i<n;i++){
                list.add(numbers[i]);//将数组放入arrayList中
            }
            //实现了Comparator接口的compare方法,将集合元素按照compare方法的规则进行排序
            Collections.sort(list,new Comparator<Integer>(){

                @Override
                public int compare(Integer str1, Integer str2) {
                    // TODO Auto-generated method stub         
                        String s1=str1+""+str2;
                        String s2=str2+""+str1;
                        System.out.println("s1= " + s1 + "  ;s2= " + s2);
                        return s1.compareTo(s2);
                    }
                });

            for(int j:list){
                s+=j;
            }
            return s;
        }
}

看输出结果:

s1= 3213  ;s2= 3321
s1= 32321  ;s2= 32132
s1= 323  ;s2= 332
s1= 32321  ;s2= 32132

通过输出可以看到排序中的比较过程。

猜你喜欢

转载自blog.csdn.net/mengmengdastyle/article/details/80543800
今日推荐