[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 的目录 大概 会更新的更勤快一些。

题目地址:118. Pascal’s Triangle

题目

如下:

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

[JavaScript 刷题] DP - 买卖股票的最佳时机,leetcode 121

手把手带你刷好题—— 62.数字三角形(递推简单DP)

[JavaScript 刷题] 搜索 - 组成整数的最小平方数数量, leetcode 279