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

【力扣100题】42.杨辉三角

题目描述

给定一个非负整数numRows,生成「杨辉三角」的前numRows行。在「杨辉三角」中,每个数是它左上方和右上方的数的和。

示例 1:

输入: numRows = 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]] 杨辉三角: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1

示例 2:

输入: numRows = 1 输出: [[1]]

提示:

  • 1 <= numRows <= 30

解题思路总览

方法思路时间复杂度空间复杂度适用场景
模拟构造模拟杨辉三角生成规则,第 i 行有 i 个元素O(n^2)O(n^2)面试首选

核心原理:杨辉三角的第 i 行第 j 个元素 = 第 i-1 行第 j-1 个元素 + 第 i-1 行第 j 个元素(j 从 1 开始)


模拟构造(推荐)

思路

根据杨辉三角的性质直接模拟:

  1. 第 i 行有 i 个元素(行号从 0 开始)
  2. 每行的第一个和最后一个元素都是 1
  3. 中间的元素triangle[i][j] = triangle[i-1][j-1] + triangle[i-1][j]

完整代码

classSolution{public:vector<vector<int>>generate(intnumRows){vector<vector<int>>ans;for(inti=0;i<numRows;i++){vector<int>temp;if(i==0){ans.push_back({1});continue;}for(intj=0;j<=i;j++){if(j==0||j==i){temp.push_back(1);// 首尾元素为 1}else{// 中间元素 = 左上方 + 右上方temp.push_back(ans[i-1][j-1]+ans[i-1][j]);}}ans.emplace_back(temp);}returnans;}};

算法流程图

以 numRows = 5 为例:

构建过程: i = 0: temp = [1] ans = [[1]] i = 1: j = 0: j==0 → temp=[1] j = 1: j==i → temp=[1,1] ans = [[1], [1,1]] i = 2: j = 0: j==0 → temp=[1] j = 1: j!=0 && j!=i → temp=[1, 1+1=2] j = 2: j==i → temp=[1,2,1] ans = [[1], [1,1], [1,2,1]] i = 3: j = 0: → temp=[1] j = 1: → temp=[1, 1+2=3] j = 2: → temp=[1,3, 2+1=3] j = 3: → temp=[1,3,3,1] ans = [[1], [1,1], [1,2,1], [1,3,3,1]] i = 4: j = 0: → temp=[1] j = 1: → temp=[1, 1+3=4] j = 2: → temp=[1,4, 3+3=6] j = 3: → temp=[1,4,6, 3+1=4] j = 4: → temp=[1,4,6,4,1] ans = [[1], [1,1], [1,2,1], [1,3,3,1], [1,4,6,4,1]] 最终返回 ans

逐行解析

vector<vector<int>>ans;
  • 二维向量,存储杨辉三角的所有行。
for(inti=0;i<numRows;i++){vector<int>temp;if(i==0){ans.push_back({1});continue;}
  • 外层循环遍历每一行。
  • 第 0 行特殊处理,直接添加[1]
for(intj=0;j<=i;j++){if(j==0||j==i){temp.push_back(1);// 首尾元素为 1}else{temp.push_back(ans[i-1][j-1]+ans[i-1][j]);}}
  • 内层循环遍历当前行的每个元素。
  • j == 0 || j == i:首尾元素,直接添加 1。
  • 否则:ans[i-1][j-1] + ans[i-1][j],当前元素等于上一行的左上方 + 右上方。
ans.emplace_back(temp);
  • 将当前行添加到结果中。

复杂度分析

复杂度说明
时间O(n^2)遍历半个三角,n 行共约 n*(n+1)/2 个元素
空间O(n^2)存储所有元素

优点:思路直接,代码清晰
缺点:


杨辉三角的性质

性质说明
对称性第 i 行有 i 个元素,首尾都是 1
组合数第 i 行第 j 列 = C(i, j)(二项式系数)
求和第 n 行元素之和 = 2^n
斐波那契杨辉三角的斜线之和构成斐波那契数列
杨辉三角中的组合数: C(0,0) = 1 C(1,0)=1, C(1,1)=1 C(2,0)=1, C(2,1)=2, C(2,2)=1 C(3,0)=1, C(3,1)=3, C(3,2)=3, C(3,3)=1 ...

面试追问 FAQ

问题解答
Q1:为什么ans[i-1][j-1] + ans[i-1][j]能得到正确元素?这是杨辉三角的定义:每个数是它左上方和右上方的数之和。在数组表示中,ans[i-1][j-1]是左上方,ans[i-1][j]是右上方。
Q2:为什么内层循环是j <= i因为第 i 行(从 0 开始计数)恰好有 i+1 个元素,所以 j 从 0 到 i,共 i+1 次。
Q3:杨辉三角和二项式系数有什么关系?杨辉三角的第 n 行第 k 列(从 0 开始)恰好等于 C(n, k),即二项式展开的系数。这就是二项式定理的可视化表示。
Q4:如果要返回第 numRows 行的第 k 个元素,怎么优化?直接用组合数公式 C(n, k) = n! / (k! * (n-k)!),不需要生成整个三角。
Q5:能否用更简洁的代码实现?可以合并一些逻辑,但基本框架不变。核心是triangle[i][j] = triangle[i-1][j-1] + triangle[i-1][j]

相关题目

题目难度关键点
118. 杨辉三角简单模拟构造
119. 杨辉三角 II简单只返回某一行
剑指 Offer 62. 圆圈中最后剩下的数字简单杨辉三角性质(约瑟夫环)

总结

要点说明
核心原理triangle[i][j] = triangle[i-1][j-1] + triangle[i-1][j]
首尾元素每行首尾都是 1
时间复杂度O(n^2)
空间复杂度O(n^2)

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

相关文章:

  • Win10代理设置总被改?可能是微软账户同步的‘锅’!一个本地账户登录的临时解法与永久修复
  • 从零到一:基于FISCO BCOS联盟链构建智能合约开发环境
  • Visual C++运行库终极解决方案:告别DLL缺失烦恼的快速指南
  • 3种方法彻底解决Mac NTFS读写难题:免费开源工具终极指南
  • 纪元1800模组加载器:从零开始打造你的个性化游戏世界
  • 禹州装修避坑指南:深挖行业,本土靠谱家装公司推荐 - 品牌企业推荐师(官方)
  • Midscene.js 2025:视觉优先的UI自动化将如何重塑开发范式?
  • 大语言模型如何重塑推荐系统:从特征工程到交互式推荐
  • Mega计划升级路径全解析,手把手避开3大降级陷阱、2次自动续费扣款雷区及账户冻结临界值
  • 如何用Tuna插件在OBS中实现专业级音乐信息显示:5分钟快速配置指南
  • 代数语义在时序数字电路设计与优化中的应用
  • 告别卡顿!用Qt Quick ListView的cacheBuffer和reuseItems优化你的QML应用性能
  • 基于HackerOne实战报告构建AI安全测试技能库:从模式蒸馏到自动化漏洞挖掘
  • 3步解锁百度网盘SVIP极速下载:告别限速困扰的完整指南
  • 嵌入式系统调试:当线索冲突时如何系统性定位硬件软件交互故障
  • Go语言gRPC与Protocol Buffers:高性能RPC框架
  • 供应链管理咨询头部公司十大榜单:2026年企业选型核心优势全面解析 - 远大方略管理咨询
  • 为 AI 智能体框架 OpenClaw 配置 Taotoken 作为后端模型提供商
  • 逆向分析百瑞互联BRLink:从iBridgeSDK.dll到兼容千月Bluesoleil SDK的发现之旅
  • Ubuntu 20.04下WebRTC编译:从网络困境到构建成功的完整指南
  • STM32H743用CubeMX配置高级定时器TIM1输出PWM,驱动舵机和LED亮度调节实战
  • 2026郑州彩箱工厂推荐:综合实力测评与优质选型指南 - 品牌企业推荐师(官方)
  • 从零训练专属风格模板:Midjourney V6.2风格参考+ControlNet协同工作流(含Stable Diffusion双向映射对照表)
  • 别再死磕CANOpen协议了!用CanFestival字典编辑器5分钟搞定一个从站节点
  • 信息学奥赛新手必看:用C++打印字符三角形的3种方法(附OpenJudge/洛谷真题解析)
  • Lobe CLI 工具箱:AI 应用开发者的高效命令行助手
  • 使用curl命令直接调试Taotoken大模型接口的详细步骤
  • 终极解放!淘宝自动任务神器让你每天多出30分钟自由时间
  • Android万能播放器OPlayer:如何解决格式不兼容难题的完整指南
  • 深色模式(Dark Mode)不仅仅是一个“开关