地址:
题目:
给定numRows, 生成帕斯卡三角形的前numRows行。
例如, 给定numRows = 5,
返回
[
[1],
[1,1],
[1,2,1],
[1,3,3,1],
[1,4,6,4,1]
]分析:
这个题重点就是找到帕斯卡三角形(杨辉三角)的实现规律:行数跟最长项的列数相等;每个数字等于上一行的左右两个数字之和,也就是对于上一层a和下一层b之间,有这么一个关系: b[i+1] = a[i] + a[i+1] ;当然规律很多,但这两个规律就可以实现代码了。
答案:
/**
* @param {number} numRows
* @return {number[][]}
*/
var generate = function(numRows) {
var result = [];
for (var i = 1; i <= numRows; i++) {
if (i == 1) result.push([1]);
else if (i == 2) result.push([1, 1]); // numRows为1或2的情况需要单独处理
else {
var preArr = result[result.length - 1]; // 前一行数组
var arr = new Array(i); // 项数为i的本行数组
arr[0] = 1; // 每行数组的第一个数为1
for (var j = 0; j < i - 2; j++) {
arr[j + 1] = preArr[j] + preArr[j + 1]; // 每个数字等于前一行相邻两个数字之和
}
arr[i - 1] = 1; // 每行数组的最后一个数为1
result.push(arr);
}
}
return result;
};
我是月铭泽,欢迎各位童鞋指正交流^_^