地址:
题目:
给定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;};复制代码
我是月铭泽,欢迎各位童鞋指正交流^_^