杨辉三角 II(js实现,LeetCode:119)
这题是杨辉三角的进阶版题目,所以直接在返回值那里返回整个三角的rowIndex行的数组就可以做出来
/**
* @param {number} rowIndex
* @return {number[]}
*/
var getRow = function(rowIndex) {
let arr = [[1], [1, 1]]
for (let i = 1; i <= rowIndex - 1; i++) {
let single_arr = []
for (let j = 0; j <= i + 1; j++) {
if (j == 0 || j == i + 1) {
single_arr.push(1)
} else {
single_arr.push(arr[i][j - 1] + arr[i][j])
}
console.log(single_arr)
}
arr.push(single_arr)
}
return arr[rowIndex]
};
时间和空间复杂度都为O(N²),这也太吓人了,要是返回第200行所需要的时间与空间有点太多了,这里思考一下如何优化,使用滚动数组的思想优化空间复杂度,上一篇文章提到说第rowIndex行就刚好有rowIndex个元素,
var getRow = function(rowIndex) {
let pre = [], cur = [];
for (let i = 0; i <= rowIndex; ++i) {
cur = new Array(i + 1).fill(0);
cur[0] = cur[i] =1;
for (let j = 1; j < i; ++j) {
cur[j] = pre[j - 1] + pre[j];
}
pre = cur;
}
return pre;
};
这里还是用了2个数组来实现,再优化一下,只使用一个数组
var getRow = function(rowIndex) {
const row = new Array(rowIndex + 1).fill(0);
row[0] = 1;
for (let i = 1; i <= rowIndex; ++i) {
for (let j = i; j > 0; --j) {
row[j] += row[j - 1];
}
}
return row;
};
这样优化之后空间复杂度变成了O(N)