给定一个非负整数
numRows
, 生成「杨辉三角」的前numRows
行。
解法 逐行动态规划
思路
按照题目链接中的gif动画模拟。
需要循环计算下一层,下一层是根据上一层来计算。先获得上一层,然后计算 prevRow[j - 1] + prevRow[j]
,最后将这一层的计算结果加入到结果集当中,需要注意这一层的结果左右都要被 1
包裹。
代码
function generate(numRows: number): number[][] {
if (numRows === 0) return [];
const result = [[1]];
for (let i = 1; i < numRows; i++) {
const prevRow = result[i - 1];
const row = [1];
for (let j = 1; j < prevRow.length; j++) {
row.push(prevRow[j - 1] + prevRow[j]);
}
row.push(1);
result.push(row);
}
return result;
}
时空复杂度
时间复杂度:O(n^2)
空间复杂度:结果需要O(n^2)
,额外空间使用是 O(1)