函数返回00000而不是0.这是程序用于查找从数组

时间:2017-12-30 19:17:59

标签: java comparator

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。

3 个答案:

答案 0 :(得分:0)

您是否尝试按字母顺序排序?如果是这样,我会想象像

这样的东西
public int compare(Integer X, Integer Y) {
    return X.toString().compareTo(Y.toString());
}

会做到这一点。

否则,我会从this行中删除Collections.sort(),并且应按数字顺序对其进行排序。

答案 1 :(得分:0)

让我们看看你的代码。

  • 输入数组包含00000.我猜这意味着一个包含五个0的数组:[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()时获取最后一个索引。这样,根据排序方向,您可以从列表中生成最大或最小的数字。