You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于JavaScript递归实现杨辉三角LeetCode解法的疑问求助

LeetCode《杨辉三角》递归解法解析

一、prevRows的数据类型

prevRows是二维数组,也就是“数组嵌套数组”的结构。每一层递归返回的prevRows,都是对应numRows-1时的完整杨辉三角——其中每个子数组代表杨辉三角的一行。比如当递归得到numRows=2的结果时,prevRows就是[[1], [1,1]]。

二、递归逻辑拆解(以输入numRows=5为例)

递归的核心思路是:先搞定规模更小的杨辉三角,再基于这个小三角拼出更大的。首先明确递归的终止条件:

  • 当numRows=1时,直接返回[[1]](只有一行的三角)
  • 当numRows=2时,直接返回[[1], [1,1]](两行的三角)

接下来一步步看输入5时的递归流程:

  1. 要生成5行的三角,得先递归调用拿到4行的完整三角(这就是prevRows)
  2. 要生成4行的三角,先递归拿到3行的三角
  3. 要生成3行的三角,先递归拿到2行的三角
  4. 要生成2行的三角,先递归拿到1行的三角——触发终止条件,返回[[1]]
  5. 拿到1行的结果后,构建2行的三角:在[[1]]后面加一行[1,1],返回[[1], [1,1]]
  6. 拿到2行的结果后,构建3行的三角:
    • 新增第三行,长度为3,首尾固定是1
    • 中间的元素(索引1)是上一行(也就是prevRows的最后一行[1,1])的索引0和1的元素相加:1+1=2,所以第三行是[1,2,1]
    • 把这行加到prevRows末尾,得到[[1], [1,1], [1,2,1]],作为3行的结果返回
  7. 拿到3行的结果后,构建4行的三角:
    • 新增第四行,长度4,首尾1
    • 索引1的元素:上一行[1,2,1]的索引0+1 →1+2=3
    • 索引2的元素:上一行的索引1+2 →2+1=3
    • 第四行是[1,3,3,1],加到prevRows后得到4行的三角返回
  8. 最后拿到4行的结果,构建5行的三角:
    • 新增第五行,长度5,首尾1
    • 索引1:上一行[1,3,3,1]的0+1 →1+3=4
    • 索引2:上一行的1+2 →3+3=6
    • 索引3:上一行的2+3 →3+1=4
    • 第五行是[1,4,6,4,1],加到prevRows末尾就得到了5行的完整杨辉三角

三、关键代码行解析:newRow[i] = prevRows[numRows - 2][i - 1] + prevRows[numRows - 2][i];

把这行拆成几个部分看就清晰了:

  • prevRows[numRows - 2]:prevRows是numRows-1行的杨辉三角,它的最后一行的索引是(numRows-1)-1 = numRows-2,所以这个表达式就是拿到上一层三角的最后一行(也就是当前要生成的行的“上一行”)
  • i-1和i:当前生成的newRow是第numRows行(索引从0开始的话是numRows-1),它的中间元素(排除首尾的1),等于上一行中位置i-1和i的元素之和——这正是杨辉三角的核心规则。比如newRow的索引1,对应上一行的0和1;索引2对应上一行的1和2,以此类推。

内容的提问来源于stack exchange,提问作者User9123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 17:10:06