把数组排成最小的数

来源:互联网 发布:java通过构造方法传参 编辑:程序博客网 时间:2024/06/03 14:58

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


import java.util.*;/*    * 解题思路: * 先将整型数组转换成String数组,然后将String数组排序,最后将排好序的字符串数组拼接出来。关键就是制定排序规则。 * 排序规则如下: * 若ab > ba 则 a > b, * 若ab < ba 则 a < b, * 若ab = ba 则 a = b; * 解释说明: * 比如 "3" < "31"但是 "331" > "313",所以要将二者拼接起来进行比较*/public class Solution {    public String PrintMinNumber(int [] numbers) {        if(numbers==null||numbers.length<1){            return "";        }        int len=numbers.length;        //将数组元素转换为字符串数组中的元素,即用字符串表示数字,应对大数溢出问题        String[] str=new String[len];        for(int i=0;i<len;i++){            str[i]=String.valueOf(numbers[i]);        }        Arrays.sort(str,new Comparator<String>(){            @Override            public int compare(String c1,String c2){                return (c1+c2).compareTo(c2+c1);            }        });        StringBuilder builder=new StringBuilder();        for(int i=0;i<len;i++){            builder.append(str[i]);        }        return builder.toString();    }}


原创粉丝点击