Задача: задайте список не отрицательных целых чисел, расположите их так, чтобы они составляли наибольшее число.
Мой подход:
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)
Collections.sort()
принимаетComparator
в качестве аргумента.