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

【C++刷题】力扣-#118-杨辉三角

题目描述

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

示例

示例 1:

输入: numRows = 5
输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]

示例 2:

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

题解

这个问题可以通过动态规划来解决。我们可以使用一个二维数组来存储杨辉三角的每一行,然后根据上一行计算下一行的值。

  1. 初始化:创建一个空列表 triangle 来存储杨辉三角的每一行。
  2. 特殊情况:如果 numRows 为 0,返回空列表;如果 numRows 为 1,返回只有一个元素 [1] 的列表。
  3. 构建杨辉三角:对于每一行 i(从 0 到 numRows - 1):
    ○ 创建一个列表 row,初始值为 [1],因为每一行的第一个和最后一个数字都是 1。
    ○ 如果当前行不是第一行,对于 row 中的每个位置 j(从 1 到 i - 1),计算 row[j] 的值为 triangle[i - 1][j - 1] + triangle[i - 1][j]。
    ○ 将计算好的行添加到 triangle 中。
  4. 返回结果:返回 triangle。

代码实现

vector<vector<int>> generate(int numRows) {vector<vector<int>> triangle;for (int i = 0; i < numRows; i++) {std::vector<int> row(i + 1, 1); // 初始化行,首尾为1if (i > 0) {for (int j = 1; j < i; j++) {row[j] = triangle[i - 1][j - 1] + triangle[i - 1][j];}}triangle.push_back(row);}return triangle;
}

复杂度分析

● 时间复杂度:O(numRows^2),因为我们需要计算每一行的每个数字,每个数字的计算时间是 O(1)。
● 空间复杂度:O(numRows^2),因为我们需要存储整个杨辉三角的前 numRows 行。
这个算法的优势在于它直接模拟了杨辉三角的构建过程,不需要额外的数学计算。

http://www.lryc.cn/news/462107.html

相关文章:

  • Linux下的环境变量
  • Edge论文的创新点
  • ‌ComfyUI 高级实战:实现华为手机的AI消除功能
  • 我记得我曾喜欢过冬天
  • 最新夜间数据集发布LoLI-Street: 33000帧数据,涵盖19000个目标
  • 反向传播算法与随机搜索算法的比较
  • 【PDF文件】默认被某种软件打开,如何进行修改?
  • Kaggle Python练习:字符串和字典(Exercise: Strings and Dictionaries)
  • React(四) 事件总线,setState的原理,PureComponent优化React性能,ref获取类组件与函数组件
  • Java学习-JVM
  • leed认证分几个级别
  • 3.C++经典实例-计算一个数的阶乘
  • 深入理解Qt中的QTableView、Model与Delegate机制
  • 解读《ARM Cortex-M3 与Cortex-M4 权威指南》——第1章 ARM Cortex-M处理器简介
  • java集合类的框架体系
  • 基于SpringBoot+Vue+Uniapp家具购物小程序的设计与实现
  • 什么是模糊测试?
  • 3.C++经典实例-奇数还是偶数
  • 真牛啊!全球人工智能标准教科书,斯坦福、麻省理工、加州大学等十多所顶尖机构为它点赞!!
  • Android——通过MediaStore查询图片
  • 手写Spring IOC-简易版
  • 【算法题】62. 不同路径(LeetCode)
  • 【VUE】Vue中的data属性为什么是一个函数而不是一个对象
  • ddos攻击介绍和排查方法
  • git clone --single-branch 提升效率
  • 代码随想录算法训练营第十天|1. 两数之和,第454题.四数相加II
  • 龙迅LT8911EX LVDS转EDP 点屏,大批量出货产品
  • 浅谈Oracle之游标
  • 基于在线教育系统源码的企业培训平台开发解决方案详解
  • Whisper 音视频转写