题目
给定一个非负整数 numRows
,生成「杨辉三角」的前 numRows
行。
在「杨辉三角」中,每个数是它左上方和右上方的数的和。
https://leetcode.cn/problems/pascals-triangle/
思路
动态规划:p[i][j] = p[i-1][j-1] + p[i-1][j]
代码
class Solution {
// List是要起返回的类型
// 但是List是抽象类,又不能实例化
// 所以需要用子类给父类实例化
public List<List<Integer>> generate(int numRows) {
List<List<Integer>> ret = new ArrayList<List<Integer>>();
for (int i = 0; i < numRows; ++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(ret.get(i - 1).get(j - 1) + ret.get(i - 1).get(j));
}
}
ret.add(row);
}
return ret;
}
}
class Solution:
def generate(self, numRows: int) -> List[List[int]]:
# p[i][j] = p[i-1][j-1] + p[i-1][j]
res = []
for i in range(numRows):
cans = []
for j in range(i+1):
if (i-1 >= 0) and (j-1 >= 0) and (j <= i-1):
temp = res[i-1][j-1] + res[i-1][j]
cans.append(temp)
else:
cans.append(1)
res.append(cans)
return res