注:本文的实现思路主要是基于JS(JavaScript),涉及到的一些函数都是JS中的自带函数
题目描述
给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。
在「杨辉三角」中,每个数是它左上方和右上方的数的和。
输入示例
输入: numRows = 5
输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]
输入: numRows = 1
输出: [[1]]
解题思路
这道题目是一个数学问题,直接按照规律去写代码即可。前两行比较固定,所以当numRows
为1或2时直接返回即可。当numRows >= 3
时,按照规律,两侧是1,中间是上一行相邻两个数相加的结果。这个代码不是最简洁的,但是一定是最容易理解的。
var generate = function(numRows) {
if (numRows === 1) return [[1]]
else if (numRows === 2) return [[1], [1,1]]
else{
// 初始化保存结果的数组
let result = [[1], [1,1]]
// 控制循环次数的变量
let count = 1
while(numRows !== count + 1){
// 新的一行,左侧一定是 1
let temp = [1]
for (var i = 0; i < result[count].length - 1; i++) {
// 上一行相邻两个数相加, 得到当前这一行的数据
temp.push(result[count][i] + result[count][i + 1])
}
// 新的一行,右侧一定是 1,需要补上
temp.push(1)
// 把这一行插入到保存结果的数组中
result.push(temp)
count ++
}
return result
}
};
当然也有更简洁的版本,这个是官方提供的,路逻辑性很强。
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;
};