题目描述
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;
}
}