当前位置: 代码迷 >> 综合 >> js + leetcode刷题:No.118 杨辉三角 No.119 杨辉三角II
  详细解决方案

js + leetcode刷题:No.118 杨辉三角 No.119 杨辉三角II

热度:58   发布时间:2023-09-22 02:22:20.0

No.118 杨辉三角

(在杨辉三角中,每个数是它左上方和右上方的数的和。)

给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。
示例:

输入: 5
输出:
[
[1],
[1,1],
[1,2,1],
[1,3,3,1],
[1,4,6,4,1]
]

No.119 杨辉三角II

给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行。
示例:
输入: 3
输出: [1,3,3,1]
进阶:
你可以优化你的算法到 O(k) 空间复杂度吗?

解法:

两道题目,一个是每行,一个是总体,可以相互得出;且119要求尝试O(k)空间复杂度
// 118 Solution One
/*** @param {number} numRows* @return {number[][]}*/
var generate0 = function(numRows) {let res = [], subArr = []for(let i = 0; i < numRows; i++){subArr = []for(let j = 0; j <= i; j++){if(j > 0 && j < i){// j不为第一位和最后一位subArr.push(res[i-1][j-1] + res[i-1][j])}else{subArr.push(1)}}res.push(subArr)}return res
};
// 118 Solution Two
var generate0 = function(numRows) {let res = []for(let i = 0; i < numRows + 1; i++){res.push(getRow(i))}return res
};
var getRow = function(rowIndex) {if(rowIndex === 0) return [1]let preRow = getRow(rowIndex - 1)let res = [1]for(let i = 0; i < preRow.length - 1; i++){res.push(preRow[i] + preRow[i+1])}res.push(1)return res
};
/*
119. 杨辉三角 II
给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行。
示例:输入: 3输出: [1,3,3,1]
进阶:你可以优化你的算法到 O(k) 空间复杂度吗?
*/
// Solution One
/*** @param {number} rowIndex* @return {number[]}*/
var getRow0 = function(rowIndex) {let res = [], subArr = []for(let i = 0; i < rowIndex + 1; i++){subArr = []for(let j = 0; j <= i; j++){if(j > 0 && j < i){// j不为第一位和最后一位subArr.push(res[i-1][j-1] + res[i-1][j])}else{subArr.push(1)}}res.push(subArr)}return res[rowIndex]
};
// Solution Two -- O(k)空间复杂度
var getRow1 = function(rowIndex) {if(rowIndex === 0) return [1]let preRow = getRow(rowIndex - 1)let res = [1]for(let i = 0; i < preRow.length - 1; i++){res.push(preRow[i] + preRow[i+1])}res.push(1)return res
};