杨辉三角简介
杨辉三角是二项式系数在三角形中的几何排列,其第 n 行第 k 个数字对应组合数 C(n-1, k-1)。每一行的首尾数字为 1,中间数字为上一行相邻两个数字之和。
问题描述
LeetCode 题目 118. 杨辉三角 要求生成前 numRows 行的杨辉三角,并以 List<List<Integer>> 形式返回。
实现思路
使用动态规划思想,逐行生成杨辉三角。每一行的生成依赖于前一行的结果,避免重复计算。
Java 实现代码
import java.util.ArrayList;
import java.util.List;
public class Solution {
public List<List<Integer>> generate(int numRows) {
List<List<Integer>> triangle = new ArrayList<>();
for (int rowNum = 0; rowNum < numRows; rowNum++) {
List<Integer> row = new ArrayList<>();
// 每一行的首尾元素为 1
row.add(1);
// 生成中间元素
if (rowNum > 0) {
List<Integer> prevRow = triangle.get(rowNum - 1);
for (int j = 1; j < rowNum; j++) {
row.add(prevRow.get(j - 1) + prevRow.get(j));
}
row.add(1);
}
triangle.add(row);
}
return triangle;
}
}
代码解析
-
初始化结果列表
创建一个List<List<Integer>>类型的变量triangle用于存储最终结果。 -
逐行生成杨辉三角
外层循环控制行数,从第 0 行到第numRows - 1行。 -
处理每一行
每一行初始化时先添加首元素 1。如果当前行不是第 0 行,则根据前一行的数据计算中间元素的值。 -
中间元素计算
对于第i行(i > 0),中间第j个元素的值为前一行第j - 1个元素和第j个元素之和。 -
添加尾元素 1
每一行的最后一个元素固定为 1。
复杂度分析
- 时间复杂度:O(numRows²),因为需要生成 numRows 行,每行最多有 numRows 个元素。
- 空间复杂度:O(numRows²),存储结果所需的空间。
示例输出
对于 numRows = 5,输出结果为:
[
[1],
[1,1],
[1,2,1],
[1,3,3,1],
[1,4,6,4,1]
]
边界情况
numRows = 0:返回空列表[]。numRows = 1:返回[[1]]。
总结
通过动态规划逐行生成杨辉三角,代码简洁高效。面试时需注意边界条件的处理以及代码的可读性。

被折叠的 条评论
为什么被折叠?



