【发布时间】:2021-04-17 09:23:42
【问题描述】:
所以有人问我在 java 中使用 2D List 生成 Pascal 三角形....我能够找到解决方案但是...当我在我的程序中使用 add 方法我没有收到任何错误,但是当我使用 set 方法时,我收到长度为 1 的 ArrayOutOfBoundIndex 错误。有人可以帮我指出不同之处吗?(错误出现的行已被评论)
输入- numRows = 5 预期输出 - [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]
public List<List<Integer>> generate(int numRows) {
List<List<Integer>> Pa = new ArrayList<List<Integer>>();
List<Integer>row,prev = null;
for(int i = 0 ; i< numRows;i++){
row=new ArrayList<Integer>();
for(int j = 0 ; j<=i;j++){
if(j==i||j==0)
row.add(1);
else{
// thisLine -->
row.set(j,prev.get(j-1)+prev.get(j));
}
}
prev=row;
Pa.add(i,row);
}
return Pa;
}
at line 64, java.base/jdk.internal.util.Preconditions.outOfBounds
at line 70, java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex
at line 248, java.base/jdk.internal.util.Preconditions.checkIndex
at line 373, java.base/java.util.Objects.checkIndex
at line 439, java.base/java.util.ArrayList.set
at line 12, Solution.generate
at line 54, __DriverSolution__.__helper__
at line 84, __Driver__.main
【问题讨论】:
-
set()方法只能覆盖现有索引处的元素。add()方法添加新元素。 -
set用于替换列表中指定索引处的已经存在的值。add在列表末尾或指定索引处添加新元素(该索引处的前一个元素不会被替换,而是右移)。