把数组排成最小的数

把数组排成最小的数

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


在这里自定义一个比较大小的函数,比较两个字符串s1, s2大小的时候,先将它们拼接起来,比较s1+s2,和s2+s1那个大,如果s1+s2大,那说明s2应该放前面,所以按这个规则,s2就应该排在s1前面。将字符串按此规则升序排好后拼接输出

import java.util.*;

public class Solution {
    public String PrintMinNumber(int [] numbers) {
        int size=numbers.length;
        if(size<1){
            return "";
        }
        ArrayList<String>strNum=new ArrayList<String>();
        for(int i=0;i<size;i++){
            strNum.add(String.valueOf(numbers[i]));
        }
        String ans="";
        Collections.sort(strNum,new Comparator<String>(){
            @Override
            public int compare(String t1,String t2){
                if(Long.valueOf(t1+t2)>Long.valueOf(t2+t1)){
                    return 1;
                }else{
                    return -1;
                }
            }
        });
        for(int i=0;i<size;i++){
            ans=ans+strNum.get(i);
        }
        return ans;
    }
}

  1. 将其他的基本类型的值转换为String:String.valueOf()
  2. 字符串数组也是能用的,没必要每次都构造容器
posted @ 2020-03-06 09:38  别再闹了  阅读(57)  评论(0)    收藏  举报