最大数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最大数相关的知识,希望对你有一定的参考价值。

题目

给出一组非负整数,重新排列他们的顺序把他们组成一个最大的整数。

给出 [1, 20, 23, 4, 8],返回组合最大的整数应为8423201

 

解题:

对于20 23 可以组成2023 和2320 显然2320更大应该排在前面

对于5 51 可以组成551 和 515 显然551更大应该排在前面

所以在比较两个数大小的规则应该将两个数链接起来后再比较大小

对于left、right

我们应该比较:leftright 和rightleft 的大小

public String largestNumber(int[] num) {
    ArrayList<String> list = new ArrayList<>();
    for(int i: num){
        list.add(i+"");
    }
    
    Collections.sort(list, new Comparator<String>(){
        public int compare(String left, String right){
            String leftRight = left+right;
            String rightLeft = right+left;
            return leftRight.compareTo(rightLeft);
        }
    });
    
    String result = "";
    for(int i=list.size()-1; i>=0; i--){
        result += list.get(i);
    }
    
    int i=0;
    while(i<result.length() && result.charAt(i)==‘0‘){
        i++;
    }
    if(i==result.length()){
        return "0";
    }
    
    return result.substring(i);
}

 

以上是关于最大数的主要内容,如果未能解决你的问题,请参考以下文章

《LeetCode之每日一题》:96.数组中最大数对和的最小值

CSDN|每日一练最大数

CSDN|每日一练最大数

[JSOI2008]最大数

LQ0245 最大数程序填空

LeetCode-数组最大数