1. 杨辉三角问题解析
杨辉三角是数学中一个经典的数字三角形排列,在编程面试和算法练习中经常出现。这个问题看似简单,但能很好地考察程序员对数组操作、递推关系和边界条件的处理能力。
1.1 问题描述与要求
题目要求给定一个非负整数 rowIndex,返回杨辉三角的第 rowIndex 行。这里需要注意题目中的索引是从0开始计数的。例如:
- 输入:rowIndex = 3
- 输出:[1,3,3,1]
1.2 杨辉三角的数学特性
杨辉三角的每个数字等于它上方两个数字之和(除了最外层的1)。数学上可以用组合数表示:第n行第k个数字等于C(n,k)。这个特性为我们提供了两种解题思路:
- 逐行构建整个三角形直到目标行
- 直接计算目标行的每个元素
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 解法一:逐行构建法
2.1 基本实现思路
最直观的方法是构建整个杨辉三角直到所需行。我们可以初始化一个二维数组,然后按行填充:
- 初始化结果列表
- 每行的第一个和最后一个元素都是1
- 中间元素等于上一行的相邻两个元素之和
python复制def getRow(rowIndex):
triangle = []
for i in range(rowIndex + 1):
row = [1] * (i + 1)
for j in range(1, i):
row[j] = triangle[i-1][j-1] + triangle[i-1][j]
triangle.append(row)
return triangle[rowIndex]
2.2 复杂度分析
- 时间复杂度:O(n²),需要构建n行,每行平均n/2个元素需要计算
- 空间复杂度:O(n²),需要存储整个三角形
提示:这种方法虽然直观,但空间效率不高,特别是当rowIndex较大时。
3. 解法二:滚动数组优化
3.1 空间优化思路
观察到每行只依赖前一行,我们可以只维护前一行而不是整个三角形:
python复制def getRow(rowIndex):
prev_row = []
for i in range(rowIndex
