题目
给定一个非负整数
numRows, 生成「杨辉三角」的前numRows行。
代码实现
public List<List<Integer>> generate(int numRows) {
List<List<Integer>> result = new ArrayList<>();
if (numRows == 0) return result;
result.add(Collections.singletonList(1));
for (int i = 1; i < numRows; i++) {
List<Integer> list = new ArrayList<>();
list.add(1);
for (int j = 1; j < i; j++) {
list.add(result.get(i - 1).get(j - 1) + result.get(i - 1).get(j));
}
list.add(1);
result.add(list);
}
return result;
}
代码分析
我们首先创建一个空的集合列表result,用于存储生成的杨辉三角形。如果输入的numRows为0,则直接返回空的result。接着,将第一行[1]添加到result中。接下来从第二行开始,使用循环来生成每一行的列表。我们需要先new一个集合用来存储元素,将第一个元素1添加到集合中。使用内层循环来生成当前行的其他元素。对于第i行的第j个元素,它等于上一行的第j-1个元素和第j个元素之和,即result.get(i-1).get(j-1) + result.get(i-1).get(j)。将计算得到的值添加到集合中。直到内层循环结束后,将最后一个元素1添加到集合中,表示该行的最后一个元素。将集合添加到 对象result中,这样就可以完成当前行的生成。 当所有行都生成完毕后,返回该结果,就会得到了一个包含numRows行的杨辉三角形的列表。