题目
给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。
在「杨辉三角」中,每个数是它左上方和右上方的数的和。

示例 1:
输入: numRows = 5
输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]
示例 2:
输入: numRows = 1
输出: [[1]]
题解
java
class Solution {
public List<List<Integer>> generate(int numRows) {
List<List<Integer>> c = new ArrayList<>(numRows); // 预分配空间
c.add(List.of(1));
for (int i = 1; i < numRows; i++) {
List<Integer> row = new ArrayList<>(i + 1); // 预分配空间
row.add(1);
for (int j = 1; j < i; j++) {
// 左上方的数 + 正上方的数
row.add(c.get(i - 1).get(j - 1) + c.get(i - 1).get(j));
}
row.add(1);
c.add(row);
}
return c;
}
}
解析
出自:简单题,简单做(Python/Java/C++/C/Go/JS/Rust)
java
class Solution { //定义一个新的解决方案类
public List<List<Integer>> generate(int numRows) { //此函数接受一个字符串s作为输入参数,用于匹配回文。返回值为布尔类型(True if s is a palindrome, False otherwise)
List<List<Integer>> c = new ArrayList<>(numRows); //在这里创建一个空的二维列表(可变长度数组)来存储所有三角形行。这个列表最多有'numRows'个子元素,每个子元素都表示一个帕斯卡三角形行
c.add(List.of(1)); //将第一个值[1]添加到我们的二维列表中
for (int i = 1; i < numRows; i++) { //从第二个数字开始(因为帕斯卡三角形的每个行都有一个'1'作为前缀和后缀,所以我们从1开始循环)。在这里'i'表示每一行的索引号
List<Integer> row = new ArrayList<>(i + 1); //创建一个新的ArrayList来存储每一行的数字。它的容量将等于行数+1(因为每个帕斯卡三角形行都有一个额外的'1'作为后缀)
row.add(1); //由于每个帕斯卡三角形行的起始有一个'1',所以将第一个值[1]添加到我们的新创建的ArrayList中
for (int j = 1; j < i; j++) { //这个循环用于获取每一行中的第j个计算出的元素。在这里'j'从我们的第二个值开始,一直到索引为i(不包括最大数)
row.add(c.get(i - 1).get(j - 1) + c.get(i - 1).get(j)); //计算第i-th行中第j个数字。它是帕斯卡三角形中的左上方和正上方的元素之和
}
row.add(1); //由于每个帕斯科三角形行的结尾有一个'1',所以将最后一个值[1]添加到我们的新创建的ArrayList中
c.add(row); //将每一行添加到我们的二维列表c中
}