Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
菜鸟就要从第27、28题继续
一、题目描述:
给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。
在「杨辉三角」中,每个数是它左上方和右上方的数的和。
示例 1:
输入: numRows = 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]] 示例 2:
输入: numRows = 1 输出: [[1]]
提示:
1 <= numRows <= 30
来源:力扣(LeetCode) 链接:leetcode-cn.com/problems/pa… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
二、思路分析:
数学:直观来想只要按曾循环计算即可,这里注意每一层分别来fill填充计算,其实没有什么特别之处。
z
三、AC 代码:
1、数学计算
/**
* @param {number} numRows
* @return {number[][]}
*/
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;
};
一、题目描述:
给定一个非负索引 rowIndex,返回「杨辉三角」的第 rowIndex 行。
在「杨辉三角」中,每个数是它左上方和右上方的数的和。
示例 1:
输入: rowIndex = 3 输出: [1,3,3,1] 示例 2:
输入: rowIndex = 0 输出: [1] 示例 3:
输入: rowIndex = 1 输出: [1,1]
提示:
0 <= rowIndex <= 33
来源:力扣(LeetCode) 链接:leetcode-cn.com/problems/pa… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
二、思路分析:
数学:直观来想只要按曾循环计算即可,最后去除最后一行
空间优化:其实对之前的每一层是没必要储存的,因此可以只储存一行即可
组合数公式:通过动态规划可以将杨辉三角和组合数公式联系起来
三、AC 代码:
1、数学计算
/**
* @param {number} rowIndex
* @return {number[]}
*/
var getRow = function(rowIndex) {
const C = new Array(rowIndex + 1).fill(1);
for (let i = 0; i <= rowIndex; ++i) {
C[i] = new Array(i + 1).fill(1);
for (let j = 1; j < i; j++) {
C[i][j] = C[i - 1][j - 1] + C[i - 1][j];
}
}
return C[rowIndex];
};
2、空间优化
/**
* @param {number} rowIndex
* @return {number[]}
*/
var getRow = function(rowIndex) {
let pre = [], cur = [];
for (let i = 0; i <= rowIndex; ++i) {
cur = new Array(i + 1).fill(1);
for (let j = 1; j < i; ++j) {
cur[j] = pre[j - 1] + pre[j];
}
pre = cur;
}
return pre;
};
3、组合数公式
/**
* @param {number} rowIndex
* @return {number[]}
*/
var getRow = function(rowIndex) {
const row = new Array(rowIndex + 1).fill(1);
for (let i = 1; i <= rowIndex; ++i) {
row[i] = row[i - 1] * (rowIndex - i + 1) / i;
}
return row;
};