簡體   English   中英

由整數數組列表形成的最大數

[英]Maximum number formed from array list of integers

問題:給定一個非負整數列表,將它們排列為最大數。

我的方法:

public class Solution implements Comparator<Integer>{
    public String largestNumber(final List<Integer> A) {
        List<Integer> B = A;
        Collections.sort(B);
        String ans = "";
        for(int i=B.size()-1;i>=0;i--)
            ans = ans+Integer.toString(B.get(i));
        return ans;
    }
    public int compare(Integer a,Integer b){
        String as = Integer.toString(a);
        String bs = Integer.toString(b);
        String fe = as+bs;
        String se = bs+as;
        return (fe.compareTo(se));
    }
}

出現的問題:對於A = [3,30,34,5,9],顯示的輸出為3430953,但預期的輸出為9534330。

從我可以看到,數組列表通常不使用自定義的compare()方法進行排序。 為什么會這樣呢?

您在哪里:

Collections.sort(B);

您正在按元素的自然順序進行排序,因為您未指定比較器。

由於您位於Solution類之內,並且它實現Comparator<Integer> ,因此您可能意味着:

Collections.sort(B, this);

因此您實際上將使用已定義的順序。

Python版本:

import functools
from functools import cmp_to_key

num=[3, 30, 34, 5, 9]

def compare(n1, n2):
    if n1 + n2 > n2 + n1:
        return 1
    elif n1 + n2 < n2 + n1:
        return -1
    else:
        return 0

num_str = [str(n) for n in num]
res = ""
print(num_str)

res=""
for n in sorted(num_str,key=functools.cmp_to_key(compare),reverse=True) :
            res += n

print(res)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM