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

LeetCode Hot100(66/100)——118. 杨辉三角

文章目录

    • 题目链接
    • 题目说明
    • 解题思路总览
    • 解法一:二维 DP 表(最直观)
      • 原理
      • 流程图
      • Java 代码
      • 复杂度分析
    • 解法二:按行迭代(推荐)
      • 原理
      • 时序图
      • Java 代码
      • 复杂度分析
    • 解法三:组合数公式
      • 原理
      • Java 代码
      • 复杂度分析
    • 示例推演(numRows = 5)
    • 各解法实现复杂度与性能对比

题目链接

https://leetcode.cn/problems/pascals-triangle/description/?envType=study-plan-v2&envId=top-100-liked

题目说明

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

杨辉三角规则:

  • 每行第一个和最后一个数字都是1
  • 中间位置满足:triangle[i][j] = triangle[i-1][j-1] + triangle[i-1][j]

示例(numRows = 5):

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

约束(LeetCode 常见约束):1 <= numRows <= 30


解题思路总览

杨辉三角

核心规律

边界恒为1

中间=左上+右上

解法一 二维DP表

直观

便于理解状态转移

解法二 按行迭代

只依赖上一行

代码简洁

解法三 组合数公式

第i行第j个=C(i,j)

用递推避免阶乘溢出


解法一:二维 DP 表(最直观)

原理

dp[i][j]表示第i行第j列(0-based):

  • j == 0j == i时,dp[i][j] = 1
  • 否则:dp[i][j] = dp[i-1][j-1] + dp[i-1][j]

最后把每一行收集到结果列表中。

流程图

开始

创建二维数组 dp 和结果 ans

for i = 0..numRows-1

for j = 0..i

j==0 或 j==i?

dp[i][j]=1

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

加入当前行

本行结束?

所有行结束?

返回 ans

Java 代码

importjava.util.*;classSolution{publicList<List<Integer>>generate(intnumRows){int[][]dp=newint[numRows][numRows];List<List<Integer>>ans=newArrayList<>();for(inti=0;i<numRows;i++){List<Integer>row=newArrayList<>();for(intj=0;j<=i;j++){if(j==0||j==i){dp[i][j]=1;}else{dp[i][j]=dp[i-1][j-1]+dp[i-1][j];}row.add(dp[i][j]);}ans.add(row);}returnans;}}

复杂度分析

  • 时间复杂度:O(numRows^2)
  • 空间复杂度:O(numRows^2)(二维表 + 输出)

解法二:按行迭代(推荐)

原理

只保存“上一行”,生成“当前行”:

  • 当前行首尾是1
  • 中间值来自上一行对应的两个位置相加

这是最常见、最清晰的工程写法。

时序图

ans(结果)cur(当前行)prev(上一行)主循环(i)ans(结果)cur(当前行)prev(上一行)主循环(i)创建长度 i+1 的新行填充首尾 1读取 prev[j-1], prev[j]返回两个值计算中间元素并加入cur 入结果prev = cur

Java 代码

importjava.util.*;classSolution{publicList<List<Integer>>generate(intnumRows){List<List<Integer>>ans=newArrayList<>();List<Integer>prev=newArrayList<>();for(inti=0;i<numRows;i++){List<Integer>cur=newArrayList<>();for(intj=0;j<=i;j++){if(j==0||j==i){cur.add(1);}else{cur.add(prev.get(j-1)+prev.get(j));}}ans.add(cur);prev=cur;}returnans;}}

复杂度分析

  • 时间复杂度:O(numRows^2)
  • 额外空间复杂度:O(numRows)(不算输出,仅上一行临时存储)
  • 若计入输出,整体仍为O(numRows^2)

解法三:组合数公式

原理

杨辉三角第i行(0-based)第j个数就是组合数:

C ( i , j ) C(i, j)C(i,j)

使用递推避免直接阶乘:

C ( i , j ) = C ( i , j − 1 ) × i − j + 1 j C(i, j) = C(i, j-1) \times \frac{i-j+1}{j}C(i,j)=C(i,j1)×jij+1

每一行从1开始递推,逐个得到后续元素。

Java 代码

importjava.util.*;classSolution{publicList<List<Integer>>generate(intnumRows){List<List<Integer>>ans=newArrayList<>();for(inti=0;i<numRows;i++){List<Integer>row=newArrayList<>();longval=1;// C(i,0)=1for(intj=0;j<=i;j++){row.add((int)val);// 计算下一个组合数 C(i, j+1)val=val*(i-j)/(j+1);}ans.add(row);}returnans;}}

复杂度分析

  • 时间复杂度:O(numRows^2)
  • 额外空间复杂度:O(1)(不计输出)
  • 需注意中间计算建议用long

示例推演(numRows = 5)

第0行: [1] 第1行: [1, 1] 第2行: [1, 2, 1] 第3行: [1, 3, 3, 1] 第4行: [1, 4, 6, 4, 1]

各解法实现复杂度与性能对比

解法核心思想时间复杂度额外空间复杂度(不含输出)实现复杂度性能表现适用场景
二维 DP 表显式保存所有状态O(n²)O(n²)稳定,但内存占用最高教学、初学者理解转移
按行迭代只依赖上一行O(n²)O(n)综合最优,代码简洁面试/实战首选
组合数公式直接算 C(i,j)O(n²)O(1)空间最省,需注意数值细节追求数学解法、低额外空间

结论:
在这题约束下,三种都能轻松通过。推荐优先写“按行迭代”:可读性和工程实用性最好。

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

相关文章:

  • Qt进程间通信
  • LeetCode Hot100(68/100)——198. 打家劫舍
  • 【LLM进阶-Agent】13.function call vs mcp vs skills
  • 2025_NIPS_EgoExoBench: A Benchmark for First- and Third-person View Video Understanding in MLLMs
  • 告别绘图软件!Paperxie AI 科研绘图:10 次免费额度,让理工科论文可视化一步到位
  • Tower I3C Host Adapter 使用范例 (20)
  • 【C++】左值引用、右值引用
  • CS二开之睡眠混淆(五)BeaconGate,UDRL,Sleepmask组合拳
  • AI新范式 02|拆解世界模型:它是如何理解物理规律的?
  • WebRTC QoS方法之NetEQ在流量卡弱网应用下失效
  • Java基础-1
  • 2025_NIPS_Scaling RL to Long Videos
  • 【Dv3Admin】FastCRUD MD编辑器操作
  • open claw安装在windows wsl中教程
  • HDOJ 课程例题记录
  • 第三方 API 调用 OpenClaw 出现 LLM request timed out 的解决方案
  • openclaw+qwen(笔记,非教程)
  • 讲讲普通小轿车驾驶证报考流程及费用,西安哪家驾校好? - mypinpai
  • UE5C++Part2--几种常见的变量类型
  • 企业级RustDesk私有化部署:Docker Swarm集群方案与安全加固指南
  • (85页PPT)某著名企业贝因美IT规划咨询报告(附下载方式)
  • Simulink仿真漂移机理分析(二):相图分析
  • R轻松玩转Excel数据
  • 课程记录:Windows2
  • 高德地图混合部署实战:离线瓦片与在线API的智能切换策略
  • 西安国文驾校二轮摩托车考驾照口碑如何,值得推荐吗 - 工业品牌热点
  • 探讨专业的精密锻造公司,三邑锻造在全国排名第几? - 工业推荐榜
  • 【一篇即毕业系列】C++的引用从基础到通天
  • 仅剩72小时!生态环境部新发布的《污染预测模型R实现规范》(HJ 1308-2024)强制适配倒计时(含兼容性迁移速查表)
  • 2026 本科生论文工具盘点:9 款 AI 工具搞定初稿 / 绘图 / 排版 / AI 率