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

输入可能包含多个测试样例。
对于每个测试案例,输入的第一行为一个整数m (1<=m <=100)代表输入的正整数的个数。
输入的第二行包括m个正整数,其中每个正整数不超过10000000。 

输出:

对应每个测试案例,
输出m个数字能排成的最小数字。 

样例输入:

23 13 6
23456 56

样例输出:

13236
2345656
public class MiniNumber {

    public static long getMiniNumber(int[] positiveInts)
    {
        if(positiveInts.length == 0){
            return 0;
        }
        if(positiveInts.length == 1){
            return positiveInts[0];
        }
        
        for(int i=positiveInts.length-1;i>0;i--){
            for(int j=i-1;j>=0;j--){
                if(isBigger(positiveInts[j],positiveInts[i])){
                    int temp =positiveInts[i];
                    positiveInts[i] =positiveInts[j];
                    positiveInts[j] = temp;
                }
            }
        }
        try{
            long result = positiveInts[0];
            for(int i=0;i<positiveInts.length-1;i++){
        //拼接结果集成long
                result = (long)(result*Math.pow(10,(positiveInts[i+1]+"").length()))+positiveInts[i+1];
            }
            return result;
        }catch(Exception e){
            return -1;
        }
    }

    private static boolean isBigger(int x, int y) {
        //比较两个数字大小字典大小
        StringBuffer a = new StringBuffer().append(x);
        StringBuffer b = new StringBuffer().append(y);
        while(a.length() != b.length()){
            if(a.length()>b.length() && a.length()<b.length()*2){
                b.append(b.substring(0,a.length()-b.length()));
            }else if(a.length()<b.length() && a.length()*2>b.length()){
                a.append(a.substring(0,b.length()-a.length()));
            }else if(a.length()>=b.length()*2){
                b.append(b);
            }else{
                a.append(a);
            }
        }
        boolean result = false;
        for(int i=0;i<a.length();i++){
            if(a.charAt(i) < b.charAt(i)){
                result = false;
                break;
            }else if(a.charAt(i) > b.charAt(i)){
                result = true;
                break;
            }else{
                continue;
            }
        }
        return result;
    }
}

 

posted on 2017-08-25 14:38  kosamino  阅读(168)  评论(0编辑  收藏  举报