[JavaScript 刷题] DP - 杨辉三角, leetcode 118
Posted GoldenaArcher
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[JavaScript 刷题] DP - 杨辉三角, leetcode 118相关的知识,希望对你有一定的参考价值。
[javascript 刷题] DP - 杨辉三角, leetcode 118
github repo 地址: https://github.com/GoldenaArcher/js_leetcode,Github 的目录 大概 会更新的更勤快一些。
题目
如下:
Given an integer
numRows
, return the first numRows of Pascal’s triangle.In Pascal’s triangle, each number is the sum of the two numbers directly above it as shown:
解题思路
想要解这道题,先或多或少得了解一下杨辉三角是什么。
摘自维基百科:
杨辉三角形第 n n n 层(顶层称第 0 0 0 层,第 1 1 1 行,第 n n n 层即第 n + 1 n + 1 n+1 行,此处 \\displaystyle nn 为包含 0 0 0 在内的自然数)正好对应于二项式 ( a + b ) n (a+b)^n (a+b)n 展开的系数。例如第二层 1 1 1 2 2 2 1 1 1 是幂指数为 2 2 2 的二项式 ( a + b ) n (a+b)^n (a+b)n 展开形式 a 2 + 2 a b + b 2 a^2 + 2ab + b^2 a2+2ab+b2 的系数。
更直观的方法就是……
看图:
第一层第二层没什么好说的,从第三层开始,最左和最右都是 1 1 1,中间为上一层对应两数之和。
也就是说, n n n 层的长度永远比 n + 1 n+1 n+1 层少 1,而第 n n n 层的层数与该层的元素数量也相同。
不管怎么说,知道这两个条件中的一个,就可以完成这道题目。
首先就是数组第一个元素和最后一个元素永远是 1 1 1,然后遍历上一层的数组获得两数之和即可。
使用 JavaScript 解题
/**
* @param number numRows
* @return number[][]
*/
var generate = function (numRows)
const triangle = [[1]];
if (numRows === 1) return triangle;
for (let i = 0; i < numRows - 1; i++)
const row = [1];
const prevRow = triangle[i];
for (let j = 1; j < prevRow.length; j++)
row.push(prevRow[j] + prevRow[j - 1]);
row.push(1);
triangle.push(row);
return triangle;
;
以上是关于[JavaScript 刷题] DP - 杨辉三角, leetcode 118的主要内容,如果未能解决你的问题,请参考以下文章
[JavaScript 刷题] DP - 买卖股票的最佳时机,leetcode 121
[JavaScript 刷题] DP - 组成整数的最小平方数数量, leetcode 279
[JavaScript 刷题] DP - 最大子数组和, leetcode 79