82.杨辉三角

8 阅读1分钟

题目链接

给定一个非负整数 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)