函数返回 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() 时获取最后一个索引。这样,根据排序方向,您将从列表中产生最大或最小的数字。
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() 时获取最后一个索引。这样,根据排序方向,您将从列表中产生最大或最小的数字。