把数组排成最小的数

来源:互联网 发布:js.anji ceva.com 编辑:程序博客网 时间:2024/05/17 07:51

题目描述

输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
算法:
首先思考,当我们将数组随机排列时,它们最后形成的数字的位数都是相同的,那么如果前边的位数上的数字越小,则最后的结果越小,也就是说一个数组为[3, 134,34, 45], 则显然当最后形成的数字的首位为1的时候最小,此时我们确定了第一个数字,则剩下的数组中显然应该是3, 那么如果我们将所有的数组元素按照从第一位从小到大进行排序,则最后顺序形成的数字必然最小。
代码如下:
 
 public String PrintMinNumber(int [] numbers) {        if (numbers == null || numbers.length < 0){            return "";        }        ArrayList<String> data = new ArrayList<>();           for (int i = 0; i < numbers.length; i++) {            data.add(numbers[i] + "");        }        Collections.sort(data, new Comparator<String>() {            @Override            public int compare(String o1, String o2) {                String a = o1 + o2;                String b = o2 + o1;                return a.compareTo(b);            }        });        StringBuilder result = new StringBuilder();        for (String s :                data) {            result.append(s);        }        return result.toString();    }

0 0