美文网首页
把数组排成最小的数

把数组排成最小的数

作者: 稀饭粥95 | 来源:发表于2018-08-29 17:28 被阅读10次

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

比较大小时候的巧妙解法

public class Solution {
    public String PrintMinNumber(int [] numbers) {
        Integer []s = new Integer[numbers.length];
        for(int i=0;i<numbers.length;i++){
            s[i] = new Integer(numbers[i]);
        }
        Arrays.sort(s, new Comparator<Integer>(){
            
            @Override
            public int compare(Integer o1, Integer o2) {
                // TODO Auto-generated method stub
                int a = Integer.valueOf(o1+""+o2);
                int b = Integer.valueOf(o2+""+o1);
                return a-b;
            }
        });
        StringBuilder str = new StringBuilder("");
        for(int i=0;i<numbers.length;i++){
            str.append(String.valueOf(s[i]));
        }
        return str.toString();
        
    }
}

纯手写比较的方法

public class Solution {
        int xa[] = new int[100];
        int lena = 0;
        int xb[] = new int[100];
        int lenb = 0;
        public  boolean compareSmaller(int a,int b){
            lena=0;
            while(a!=0){
                xa[lena] = a%10;
                a=a/10;
                lena++;
            }
            lenb = 0;
            while(b!=0){
                xb[lenb] = b%10;
                b=b/10;
                lenb++;
            }
            int i=lena-1;
            int j=lenb-1;
            while(i>=0&&j>=0){
                if(xa[i]>xb[j]){
                    return false;
                }
                i--;j--;
            }
            if(i>=0&&xa[i]>xb[lenb-1])  return false;
            if(j>=0&&xa[lena-1]>xb[j]) return false;
            return true;
        }
         
        public String PrintMinNumber(int [] numbers) {
            for(int i=0;i<numbers.length;i++){
                for(int j=i;j<numbers.length;j++){
                    if(!compareSmaller(numbers[i],numbers[j])){
                        int temp = numbers[i];
                        numbers[i] = numbers[j];
                        numbers[j] = temp;
                    }
                     
                }
            }
            StringBuilder strb = new StringBuilder();
            for(int i=0;i<numbers.length;i++){
                strb.append(String.valueOf(numbers[i]));
            }
            return strb.toString();
        }   
}

相关文章

  • 把数组排成最小的数

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

  • 把数组排成最小的数

    题目描述输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{...

  • 把数组排成最小的数

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

  • 把数组排成最小的数

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

  • 把数组排成最小的数

    问题描述: 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例...

  • 把数组排成最小的数

    题目描述输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{...

  • 把数组排成最小的数

    题目描述 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组...

  • 把数组排成最小的数

    题目描述 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组...

  • 把数组排成最小的数

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

  • 把数组排成最小的数

    这道题有两种方法,第一是暴力法,把所有可能都罗列出来,然后一个个比较大小。自己写的暴力法有点复杂且没有全部通过。然...

网友评论

      本文标题:把数组排成最小的数

      本文链接:https://www.haomeiwen.com/subject/qyykwftx.html