题目描述
Given an integer rowIndex, return the rowIndexth (0-indexed) row of the Pascal’s triangle.
In Pascal’s triangle, each number is the sum of the two numbers directly above it as shown:
样例描述
Example 1:
Input: rowIndex = 3
Output: [1,3,3,1]
Example 2:
Input: rowIndex = 0
Output: [1]
Example 3:
Input: rowIndex = 1
Output: [1,1]
Constraints:
0 <= rowIndex <= 33
思路
- 传统做法:直接求出二维的然后打印最后一行就可以
- 用滚动数组的思想来优化,由于对
i+1行的计算只用到第i行的数,因此算第2行只需要第1行,可以把第2行存在第0行,不断地来重复覆盖不会用到的行,只需要两行空间就行。 - 因此可以降维成两个一维数组

代码
class Solution {
public List<Integer> getRow(int rowIndex) {
//pre指向前一行
List<Integer> pre = new ArrayList<>();
//注意这要等于 因为是从第0行开始的
for (int i = 0; i <= rowIndex; i ++){
List<Integer> cur = new ArrayList<>();
for (int j = 0; j <= i; j ++){
if (j == 0 || j == i) cur.add(1);
else cur.add(pre.get(j - 1) + pre.get(j));
}
//cur赋值给pre,成为前一行,不断覆盖,滚动的精髓
pre = cur;
}
return pre;
}
}
该博客介绍了如何通过滚动数组优化算法来高效地计算帕斯卡三角形的指定行。帕斯卡三角形的每个数字是由它上面两个数字相加得到的。优化后的算法只需两行空间,不断覆盖旧行以计算新行,大大减少了内存使用。示例代码展示了如何实现这一优化,对于给定的行索引,返回帕斯卡三角形的对应行。
147

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



