发布时间:2023-03-29 14:00
给定一个非负索引 rowIndex,返回「杨辉三角」的第 rowIndex 行。
在「杨辉三角」中,每个数是它左上方和右上方的数的和。
示例一:
输入: rowIndex = 3
输出: [1,3,3,1]
示例二:
输入: rowIndex = 0
输出: [1]
示例三:
输入: rowIndex = 1
输出: [1,1]
杨辉三角相信大家应该不陌生
杨辉三角的性质:
1.每行数字左右对称,由 11 开始逐渐变大再变小,并最终回到 1。
2.第 n行(从0开始编号)的数字有 n+1项。
3.每个数字等于上一行的左右两个数字之和,左右两边为1
下面看代码
class Solution {
public List<Integer> getRow(int rowIndex) {
List<List<Integer>> C = new ArrayList<List<Integer>>();
for (int i = 0; i <= rowIndex; ++i) {
List<Integer> row = new ArrayList<Integer>();
for (int j = 0; j <= i; ++j) {
if (j == 0 || j == i) {
row.add(1);
} else {
row.add(C.get(i - 1).get(j - 1) + C.get(i - 1).get(j));
}
}
C.add(row);
}
return C.get(rowIndex);
}
}
当前行第 ii项的计算只与上一行第 i-1 项及第 i项有关。因此我们可以倒着计算当前行,这样计算到第 i项时,第 i-1 和第i项仍然是上一行的值。
class Solution {
public List<Integer> getRow(int rowIndex) {
List<Integer> row = new ArrayList<Integer>();
row.add(1);
for (int i = 1; i <= rowIndex; ++i) {
row.add(0);
for (int j = i; j > 0; --j) {
row.set(j, row.get(j) + row.get(j - 1));
}
}
return row;
}
}