题目描述

给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中,每个数是它左上方和右上方的数的和。

示例 1:
输入: numRows = 5
输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]

示例 2:
输入: numRows = 1
输出: [[1]]

思路&js代码

1、数学

var generate = function(numRows) {
    const ret = [];
 
    for (let i = 0; i < numRows; i++) {
        const row = new Array(i + 1).fill(1);
        for (let j = 1; j < row.length - 1; j++) {
            row[j] = ret[i - 1][j - 1] + ret[i - 1][j];
        }
        ret.push(row);
    }
    return ret;
};

2、

var generate = function (numRows) {
    const result = []
    for (let row = 0; row < numRows; row++) {
        const prevRow = result[row - 1]
        const currRow = []
        for (let j = 0; j <= row; j++) {
            if (j === 0 || j === row) {
                currRow.push(1)
                continue
            }
 
            const num1 = prevRow[j - 1]
            const num2 = prevRow[j]
            currRow.push(num1 + num2)
        }
        result.push(currRow)
    }
 
    return result
 
};