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

上海做推广网站新媒体运营培训课程

上海做推广网站,新媒体运营培训课程,电子商务公司怎么赚钱,做网站虚拟主机多少钱💓 博客主页:倔强的石头的CSDN主页 📝Gitee主页:倔强的石头的gitee主页 ⏩ 文章专栏:C经典例题 期待您的关注 目录 一、问题描述 二、解题思路 解法 1 思路 解法 2 思路 三、代码实现 解法 1 代码 解法 2 代码…

           💓 博客主页:倔强的石头的CSDN主页 

           📝Gitee主页:倔强的石头的gitee主页

            ⏩ 文章专栏:C++经典例题

                                  期待您的关注

 

目录

一、问题描述

二、解题思路

解法 1 思路

解法 2 思路

三、代码实现

解法 1 代码

解法 2 代码

四、总结


 

“杨辉三角” 问题是一道经典的算法题目,它不仅考验对数组操作的熟练程度,还需要深入理解杨辉三角的数学特性。

本文将详细介绍该问题的描述、解题思路以及两种不同的代码实现方案。

一、问题描述

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

在「杨辉三角」中,每个数是它左上方和右上方的数的和。

例如,当 numRows = 5 时,生成的杨辉三角如下:

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

 杨辉三角只是在逻辑上想象为一个等腰三角形

在计算机中实际存储,其实是这样的:
 

 

二、解题思路

解法 1 思路

初始化结果数组

  • 首先创建一个二维向量 result,也就是vector<vector<int>>,它的大小为 numRows,这将用于存储杨辉三角的每一行。
  • 内层vector的大小根据行号 i 来确定,第 i 行有 i + 1 个元素。并且将每一行的所有元素初始化为 1,这是因为杨辉三角每一行的首尾元素都是 1
     

计算中间元素

  • 从第三行(索引为 2)开始,因为前两行已经全部初始化为 1,不需要额外计算。
  • 对于每一行的中间元素(索引 j 从 1 到该行元素个数减 2),其值等于上一行同一列的元素 result[i - 1][j - 1] 加上上一行前一列的元素 result[i - 1][j]。通过两层循环,外层循环控制行数,内层循环控制每行的元素位置,从而完成杨辉三角的生成。

 

解法 2 思路

处理边界情况

  • 首先首先创建一个二维向量 result,vector<vector<int>>,检查输入的 numRows 是否为 0,如果是,则直接返回空的 vectot<vector<int>> result ,因为不需要生成任何行。
  • 接着处理 numRows 为 1 的情况,将第一行 [1] 直接添加到 result 中并返回。

 

初始化前两行

  • 当 numRows 大于 1 时,先将第一行 [1] 和第二行 [1, 1] 添加到 result 中。

 

生成后续行

当numRows超过2时,才需要计算) 

  • 从第三行(索引为 2)开始生成。
  • 对于每一行,首先创建一个大小为 i + 1 的vector <int>row。
  • 明确每行的首元素 row[0] 和尾元素 row[i] 都为 1。
  • 对于中间元素(索引 j 从 1 到 i - 1),其值同样通过上一行对应位置的元素相加得到,即 row[j] = result[i - 1][j - 1] + result[i - 1][j]。最后将生成的行 row 添加到 result 中

 

三、代码实现

解法 1 代码


class Solution1 
{public:vector<vector<int>> generate(int numRows) {vector<vector<int>> result(numRows, vector<int>());for (int i = 0; i < numRows; ++i) // 每行确定数据个数,并全部初始化为1{result[i].resize(i + 1, 1);}for (int i = 2; i < numRows; ++i) // 依次计算每行除首尾元素外的值,前两行不需要计算{for (int j = 1; j < result[i].size() - 1; ++j) {result[i][j] = result[i - 1][j - 1] + result[i - 1][j];}}return result;}
};

解法 2 代码


class Solution2 
{
public:vector<vector<int>> generate(int numRows) {vector<vector<int>> result;if (numRows == 0) return result;// 处理第一行result.push_back({ 1 });if (numRows == 1) return result;// 处理第二行result.push_back({ 1, 1 });// 从第三行开始生成for (int i = 2; i < numRows; ++i) {vector<int> row(i + 1);row[0] = 1; // 首元素为1row[i] = 1; // 尾元素为1// 计算中间元素for (int j = 1; j < i; ++j) {row[j] = result[i - 1][j - 1] + result[i - 1][j];}result.push_back(row);}return result;}
};

四、总结

这两种解法都通过对杨辉三角特性的理解,利用循环和数组操作来生成所需的杨辉三角。

解法 1 相对更简洁,通过一次初始化所有行并填充首尾元素为 1,再集中计算中间元素。

解法 2 则更具逻辑性,逐步处理每一行,先处理边界情况,再依次生成后续行。

两种解法在时间复杂度和空间复杂度上基本相同,时间复杂度为 O(numRows^2)),因为需要遍历杨辉三角的每一个元素;

空间复杂度同样为 (O(numRows^2)),用于存储生成的杨辉三角。

通过对这道题目的深入分析和实现,能够有效提升对数组操作和算法设计的能力。

 

http://www.dtcms.com/wzjs/291571.html

相关文章:

  • 把自己做的网页发布到网站网络推广营销网站建设专家
  • 网上手机网站建设计划书nba西部最新排名
  • 昆明做网站公司有哪些佛山seo
  • 江苏建设银行网站品牌网络推广怎么做
  • 住宅装饰装修工程施工规范网站seo课程
  • 上海商地网站建设公司每日新闻摘抄10一15字
  • wordpress+手工网站谷歌商店下载安装
  • 广州万安建设监理有限公司网站windows优化大师卸载
  • 达州网站建设公司广州网站建设方案优化
  • 如何建响应式网站不收费的小说网站排名
  • 如何建单位网站成都高端网站建设哪家好
  • 公司网站怎样实名认证今日重大新闻头条十条
  • 鄂州市城市建设档案馆网站搭建一个网站的流程
  • 怎么做网贷网站廊坊首页霸屏优化
  • 贵州有网站的企业软文兼职10元一篇
  • 快速模仿一个网站谷歌seo网站推广
  • 惠州做棋牌网站建设哪家公司便宜泉州百度seo公司
  • 中学生做网站的软件软文写作经验是什么
  • 个人网站 做导航360优化大师官方网站
  • 电商网站建设源码写软文
  • 上海青浦做网站运用搜索引擎营销的案例
  • 微信小程序网站建设公司广东省人大常委会
  • 青岛城乡建设委员会网站香港百度广告
  • 支付网站建设推广的会计分录真正免费建站
  • php玩具公司网站源码磁力搜索器 磁力猫
  • 网站做直播需要什么资质模拟搜索点击软件
  • 用dw做静态网站的步骤千峰培训可靠吗?
  • 三水 网站建设百度推广开户2400
  • 小企业网站建设的基础知识传统营销方式有哪些
  • 系统之家网站怎么做的seo个人博客