public class Solution implements Comparator<Integer> {
public String largestNumber(final List<Integer> A) {
List<Integer> B = A;
StringBuilder str = new StringBuilder();
Collections.sort(B,this);
for (int i=B.size()-1; i >= 0; i--) {
str = str.append(B.get(i));
}
return str.toString();
}
public int compare(Integer X, Integer Y) {
String XY = Integer.toString(X);
String YX = Integer.toString(Y);
String QW = XY + YX;
String WE = YX + XY;
return QW.compareTo(WE);
}
}
程序已编译但输入00000的测试用例数组失败。它表示函数返回00000而不是0。
答案 0 :(得分:0)
您是否尝试按字母顺序排序?如果是这样,我会想象像
这样的东西public int compare(Integer X, Integer Y) {
return X.toString().compareTo(Y.toString());
}
会做到这一点。
否则,我会从this
行中删除Collections.sort()
,并且应按数字顺序对其进行排序。
答案 1 :(得分:0)
让我们看看你的代码。
[0,0,0,0,0]
。执行for
循环
for (int i=B.size()-1; i >= 0; i--) {
str = str.append(B.get(i));
}
您正在遍历数组并将数组的每个元素追加到字符串构建器str
。所以你追加0,0,0,0,0,它给出了字符串00000
。
这应该解释看到的行为。你可以,例如尝试将字符串00000
转换为int,然后返回。
答案 2 :(得分:0)
你连接字符串,这很明显你可能在开头有一些领先的,非常重要的零。这并不意外。为了处理它们,在()处使用StringBuilder方法迭代以找到第一个非零字符,然后返回substring()方法的结果。只记得将字符序列长度考虑在内,所以在所有零的情况下,在调用substring()时获取最后一个索引。这样,根据排序方向,您可以从列表中生成最大或最小的数字。