当前位置: 首页 > news >正文

杨辉三角(二维数组自底向上DP表格法详解·新手友好版)

杨辉三角(二维数组自底向上DP表格法详解·新手友好版)

作为动态规划入门从一维DP过渡到二维DP的核心经典题型,杨辉三角是爬楼梯问题的最佳进阶练习。相比于抽象的嵌套集合DP写法,二维数组DP表格法逻辑更直观、表格可视化更强,完美适配新手理解二维DP的推导逻辑。

本文将基于二维数组存储DP表格的写法,沿用动态规划标准解题框架,从题目解析、DP思路拆解、逐行推导、完整代码实现、易错点总结全方位讲解,带你彻底吃透二维DP基础逻辑,为后续二维DP、路径类DP题目铺垫核心思路。

一、题目回顾

题目描述:给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。杨辉三角核心规则:每行首尾元素固定为1,中间每个元素等于上一行相邻两个元素之和。

示例

输入:numRows = 5

输出:

[ [1], [1,1], [1,2,1], [1,3,3,1], [1,4,6,4,1] ]

核心解题要求:采用二维数组自底向上DP表格法解题,用数组存储完整DP状态,直观理解二维DP的状态存储与推导逻辑,拒绝死记硬背公式。

二、动态规划核心思想(二维DP专属)

动态规划的核心始终是:化繁为简、记录子问题解、自底向上推导

爬楼梯是一维DP,只用单个数组记录每阶台阶的结果;而杨辉三角是标准二维DP问题,存在「行、列」两个维度的状态,因此需要用二维数组作为DP表格,存储每一行、每一列的数值。

自底向上核心思路:先初始化最基础的边界值(每行首尾1),再从第三行开始,利用上一行已计算好的子问题结果,逐行、逐列推导当前位置的值,最终得到完整的杨辉三角。

三、杨辉三角DP完整拆解(二维数组版)

1. 定义DP数组(核心)

我们定义二维数组作为DP状态表,专门存储杨辉三角所有位置的数值:

dp[i][j] 含义:代表杨辉三角中,第 i 行、第 j 列的元素值。

为了完整存储 numRows 行数据,我们初始化二维数组:int[][] arr = new int[numRows][numRows],该数组就是我们的核心DP表格。

2. 推导递推公式(核心逻辑)

分析杨辉三角数值规律:

任意一个非边界位置的元素,都由「上一行正上方元素」和「上一行左上方元素」相加得到。

对应DP递推公式:

arr[i][j] = arr[i-1][j] + arr[i-1][j-1]

3. 初始化边界条件(DP起点)

递推公式无法计算首尾元素,这是DP问题的基础子问题,也是固定边界:

  • 每行第一个元素:j == 0,值固定为 1

  • 每行最后一个元素:i == j,值固定为 1

所有二维DP的推导,都基于这组边界条件自底向上展开。

4. 自底向上表格填充过程(实例演示)

以 numRows = 5 为例,一步步填充二维DP数组:

第0行(i=0):j=0,触发边界 → arr[0][0] = 1 → [1]

第1行(i=1):j=0、j=1 触发边界 → arr[1][0]=1,arr[1][1]=1 → [1,1]

第2行(i=2):

j=0、j=2 为边界=1;j=1 套用公式 arr[1][1]+arr[1][0]=2 → [1,2,1]

第3行(i=3):

首尾为1;j=1=arr[2][1]+arr[2][0]=3,j=2=arr[2][2]+arr[2][1]=3 → [1,3,3,1]

第4行(i=4):

首尾为1;j=1=4、j=2=6、j=3=4 → [1,4,6,4,1]

填充完成后,将二维DP数组的有效数值转为集合,即为最终答案。

四、完整代码实现(你的二维数组DP原版、超详细注释)

以下为纯原版你的写法,保留二维数组DP核心逻辑,新增新手专属注释,完全贴合上述DP思路:

import java.util.ArrayList; import java.util.List; class Solution { public List<List<Integer>> generate(int numRows) { // 最终结果集合 List<List<Integer>> res = new ArrayList(); // 核心:二维数组DP表格,存储所有DP状态值 int[][] arr = new int[numRows][numRows]; // 自底向上遍历每一行 for(int i = 0; i < numRows; i++){ // 存储当前行的结果 List<Integer> row = new ArrayList(); // 遍历当前行的每一列(第i行有i+1个元素) for(int j = 0; j <= i; j++){ // DP边界条件:每行首尾元素为1 if(i == j || j == 0){ arr[i][j] = 1; }else{ // DP递推公式:当前值 = 上一行两个相邻值之和 arr[i][j] = arr[i-1][j] + arr[i-1][j-1]; } // 将DP表格的值存入当前行 row.add(arr[i][j]); } // 将当前行加入最终结果 res.add(row); } return res; } }

五、为什么这个写法是标准DP?

很多新手疑惑:用二维数组算不算动态规划?这里明确给出答案:这是最标准、最经典的二维自底向上DP写法

完全满足DP四大核心特征:

  1. 有专属DP表格:int[][] arr 就是状态记录表

  2. 状态定义清晰:arr[i][j] 对应第i行j列的最优解

  3. 递推推导:利用过往子问题结果推导新结果,无重复计算

  4. 自底向上:从第0行基础状态,逐步推导至最后一行

优势对比:相比于直接用List嵌套做DP,二维数组写法更适合新手,状态可视化更强,不容易出现下标越界、行列混淆问题。

六、新手高频易错点

1. 二维数组初始化大小错误

错误写法:new int[numRows][]未初始化列数

问题:会导致空指针报错,无法直接赋值

正确写法:固定行列大小new int[numRows][numRows]

2. 内层循环边界写错

错误:j < i,会少遍历最后一个元素

正确:j <= i,第i行共有i+1个元素

3. 混淆行列下标,递推公式写反

新手容易写成 arr[j-1][i],核心记住:行不变、列变化,永远是上一行(i-1)的两个列值相加。

4. 忘记逐行新建List集合

若将 List row 定义在循环外,会导致所有行数据重叠,结果出错。必须每行重新 new ArrayList。

七、DP思路升华(通用解题框架)

结合爬楼梯(一维DP)+ 杨辉三角(二维数组DP),总结通用DP解题四步框架,适配所有DP题型:

  1. 定义DP状态:确定一维/二维数组,明确dp[i]、dp[i][j]的实际含义

  2. 推导递推公式:寻找当前状态与前置子状态的关系

  3. 初始化边界:处理无法通过公式计算的基础初始值

  4. 自底向上遍历:保证前置状态优先计算,最终推出全局解

八、后续预告

本文基于二维数组DP写法,详解了杨辉三角的二维动态规划核心逻辑,完成了从一维DP到二维DP的过渡。后续将持续更新二维DP经典题型:不同路径、最小路径和、三角形最小路径等,全部沿用「数组DP讲解+新手代码+易错点总结」的风格,循序渐进吃透动态规划!

持续关注,从零起步吃透DP算法!

http://www.jsqmd.com/news/889188/

相关文章:

  • 解锁专业虚拟化:10个VMware Workstation Pro 17许可证密钥的实战应用方案
  • 河北锌钢护栏厂家选型问答 聚焦合规与场景适配 - 奔跑123
  • 苏州 cppm 培训机构中供国培首选 - 中供国培
  • 终极指南:3分钟完成BetterNCM插件管理器一键安装,彻底改造你的网易云音乐
  • 海口卖表避坑全套攻略 识破行业套路避免无端折价 - 奢侈品回收测评
  • 2026最新五家龙南市黄金回收白银回收铂金回收彩金回收店铺靠谱回收门店推荐TOP5排行榜及联系方式推荐 - 前途无量YY
  • Trumania场景模拟引擎:用行为建模生成高保真合成数据
  • Blender 3MF插件终极指南:告别格式转换的3D打印完整解决方案
  • 2026最新五家龙岩市黄金回收白银回收铂金回收彩金回收店铺靠谱回收门店推荐TOP5排行榜及联系方式推荐 - 前途无量YY
  • 从信号转换到智能采集:图像采集卡全维度技术解读
  • 靠谱的专业婚纱摄影公司哪家好?西安青木社值得信赖 - myqiye
  • 长春单招培训机构评测:资质与升学效率核心对比 - 奔跑123
  • 智能装备采购平台怎么用才省时间:产品库结构、供应商画像与询盘流程 - 品牌推荐大师
  • 常州 cppm 培训机构中供国培首选 - 中供国培
  • 2026最新五家陆丰市黄金回收白银回收铂金回收彩金回收店铺靠谱回收门店推荐TOP5排行榜及联系方式推荐 - 前途无量YY
  • 告别风扇噪音困扰:TPFanCtrl2让你的ThinkPad笔记本重获宁静
  • 长春单招培训机构实测评测 合规与升学实力对比 - 奔跑123
  • AI检测核心原理与避坑指南:为什么你的内容总被误判?
  • METALEAD:构建机器学习全实验记录数据集,重塑SOTA评估新范式
  • 河北琉璃瓦机生产厂家实力排行:技术与服务双维度评测 - 奔跑123
  • Python RLock可重入锁 - 多线程修改文件事冲突处理
  • 河北区域声屏障厂家实测评测:合规与性能维度对比 - 奔跑123
  • 5步解锁网易云音乐隐藏功能:BetterNCM-Installer全攻略
  • 干货指南:GEO 源头厂家性价比高的有哪些? - myqiye
  • 2026广州装修公司一站式对比避坑指南推荐对比 - GEO排行榜
  • 微信聊天记录本地化备份与可视化分析解决方案
  • 2026年靠谱的 山东旧楼加装电梯施工单位排行 合规高效服务商盘点 - 奔跑123
  • 2026最新五家景洪市黄金回收白银回收铂金回收彩金回收店铺靠谱回收门店推荐TOP5排行榜及联系方式推荐 - 前途无量YY
  • 2026学习机哪个品牌好?十大品牌排行榜深度测评,一文看懂必看指南 - 博客万
  • TPS薄板样条 vs 仿射/透视变换:图像变形算法该怎么选?附性能对比