Java 函数返回的是00000而不是0。这是一个用于查找数组中形成的最大数的程序 公共类解决方案实现了Comparator{ 公共字符串最大编号(最终列表A){ 清单B=A; StringBuilder str=新的StringBuilder(); 集合。排序(B,this); 对于(int i=B.size()-1;i>=0;i--){ str=str.append(B.get(i)); } return str.toString(); } 公共整数比较(整数X,整数Y){ 字符串XY=整数。toString(X); 字符串YX=Integer.toString(Y); 字符串QW=XY+YX; 字符串WE=YX+XY; 返回QW.compareTo(WE); } }
程序已编译,但输入为00000的测试用例数组失败。它表示函数返回00000而不是0。是否尝试按字母顺序排序?如果是这样的话,我会想象Java 函数返回的是00000而不是0。这是一个用于查找数组中形成的最大数的程序 公共类解决方案实现了Comparator{ 公共字符串最大编号(最终列表A){ 清单B=A; StringBuilder str=新的StringBuilder(); 集合。排序(B,this); 对于(int i=B.size()-1;i>=0;i--){ str=str.append(B.get(i)); } return str.toString(); } 公共整数比较(整数X,整数Y){ 字符串XY=整数。toString(X); 字符串YX=Integer.toString(Y); 字符串QW=XY+YX; 字符串WE=YX+XY; 返回QW.compareTo(WE); } },java,comparator,Java,Comparator,程序已编译,但输入为00000的测试用例数组失败。它表示函数返回00000而不是0。是否尝试按字母顺序排序?如果是这样的话,我会想象 public class Solution implements Comparator<Integer> { public String largestNumber(final List<Integer> A) { List<Integer> B = A; StringBuilder s
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);
}
}
我会成功的
否则,我会从
Collections.sort()
行中删除此,它应该按数字顺序进行排序。让我们看看您的代码
- 输入数组由00000组成。我猜这意味着一个由五个0组成的数组:
[0,0,0,0]
- 您正在通过比较方法对输入进行排序。在这种情况下,排序没有效果,因为我们在中只有0
- 执行
循环的
public int compare(Integer X, Integer Y) {
return X.toString().compareTo(Y.toString());
}
您正在迭代数组,并将数组的每个元素附加到字符串生成器str
。因此,您附加0,0,0,0,0作为字符串00000
这应该可以解释所看到的行为。例如,您可以尝试将字符串00000
转换为int,然后返回该值。您连接字符串,这很明显,您可能在开头有一些前导的重要零。这并不意外。要处理这些问题,请使用StringBuilder的at()方法进行迭代,以查找第一个非零字符,然后返回substring()方法的结果。只需记住也要考虑字符序列长度,以便在所有零的情况下,在调用substring()时索引最后一个字符。这样,根据排序方向,您可以从列表中生成最大或最小的数字。为什么要返回字符串而不是int?我还建议您了解Integer和int之间的区别。代码中有一条注释:在Java中,变量名应始终以小写字母开头。同样列表B=A
的作用可能与您认为的不同。您有一些非常令人困惑的变量名-XY只是X(考虑使用xs或sx-s作为字符串),YX只是Y,QW是XY(因为X和Y的concat),我们是YX。请阅读并相应地增强您的问题。
for (int i=B.size()-1; i >= 0; i--) {
str = str.append(B.get(i));
}