从数组的整数列表形成的最大数

时间:2015-04-08 19:07:12

标签: java arrays sorting arraylist

问题:给定一个非负整数列表,将它们排列成最大数字。

我的方法:

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()方法。为什么会这样?

2 个答案:

答案 0 :(得分:3)

你有这个:

Collections.sort(B);

您正在使用元素的自然顺序进行排序,因为您没有指定比较器。

由于你在Solution类中,并且它实现了Comparator<Integer>,你可能意味着:

Collections.sort(B, this);

所以你实际上会使用你定义的顺序。

答案 1 :(得分:1)

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)