输入: 5 输出: [ [1], [1,1], [1,2,1], [1,3,3,1], [1,4,6,4,1] ]
var generate = function (numRows) {
const result = [];
if (numRows <= 0) {
return result;
}
for (let i = 0; i < numRows; i++) {
const subArr = [];
for (let j = 0; j <= i; j++) {
if (j > 0 && j < i) {
subArr.push(result[i - 1][j - 1] + result[i - 1][j]);
} else {
subArr.push(1);
}
}
result.push(subArr);
}
return result;
};
Runtime: 52 ms, faster than 77.14% of JavaScript online submissions for Pascal's Triangle.
Memory Usage: 33.9 MB, less than 40.30% of JavaScript online submissions for Pascal's Triangle.
/**
* @param {number} numRows
* @return {number[][]}
*/
var generate = function (numRows) {
let res = [];
for (let i = 0; i < numRows; i++) {
res[i] = [];
for (let j = 0; j < i + 1; j++) {
res[i].push(C(i, j));
}
}
return res;
};
/**
* 组合数
* @param n
* @param r
* @returns {number}
* @constructor
*/
const C = function (n, r) {
if (n === 0) return 1;
return F(n) / F(r) / F(n - r);
}
/**
* 阶乘
* @param n
* @returns {number}
* @constructor
*/
const F = function (n) {
var s = 1;
for (var i = 1; i <= n; i++) {
s *= i;
}
return s;
}
// 阶乘也可以用尾递归写:
var factor = function (n, total = 1) {
if (n === 1) {
return 1
} else {
return factor(n - 1, n * total)
}
}
Runtime: 56 ms, faster than 55.91% of JavaScript online submissions for Pascal's Triangle.
Memory Usage: 34.4 MB, less than 5.47% of JavaScript online submissions for Pascal's Triangle.
var generate = function (numRows) {
const result = [];
for (let i = 0; i < numRows; i++) {
const subArr = [1];
for (let j = 1; j <= (i >>> 1); j++) {
subArr[j] = result[i - 1][j - 1] + result[i - 1][j];
}
for (let k = (i >>> 1) + 1; k <= i; k++) {
subArr[k] = subArr[i - k]
}
result.push(subArr);
}
return result
};
Runtime: 48 ms, faster than 91.19% of JavaScript online submissions for Pascal's Triangle.
Memory Usage: 33.9 MB, less than 45.27% of JavaScript online submissions for Pascal's Triangle.