LeetCode之JavaScript解答-118题:帕斯卡三角形

509 阅读1分钟

地址:

leetcode-cn.com/problems/pa…

题目:

给定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;
};


我是月铭泽,欢迎各位童鞋指正交流^_^