函数返回 00000 而不是 0.This 程序用于查找由数组形成的最大数

function is returning 00000 instead of 0.This is program is for finding largest number formed from an array

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.It 表示函数返回 00000 而不是 0。

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

public int compare(Integer X, Integer Y) {
    return X.toString().compareTo(Y.toString());
}

会成功的。

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

让我们看看您的代码。

  • 输入数组由 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 然后 return this.

您连接字符串,这很明显您可能在开头有一些前导的、无关紧要的零。这并不意外。要处理它们,请使用 StringBuilder 的方法 at() 进行迭代以查找第一个非零字符,然后 return substring() 方法的结果。请记住也要考虑字符序列长度,因此如果全为零,则在调用 substring() 时获取最后一个索引。这样,根据排序方向,您将从列表中产生最大或最小的数字。