【C++经典例题】杨辉三角问题
💓 博客主页:倔强的石头的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,它的大小为 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,检查输入的 numRows 是否为 0,如果是,则直接返回空的 vectot result ,因为不需要生成任何行。
- 接着处理 numRows 为 1 的情况,将第一行 [1] 直接添加到 result 中并返回。
初始化前两行:
- 当 numRows 大于 1 时,先将第一行 [1] 和第二行 [1, 1] 添加到 result 中。
生成后续行:
(当numRows超过2时,才需要计算)
- 从第三行(索引为 2)开始生成。
- 对于每一行,首先创建一个大小为 i + 1 的vector 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 generate(int numRows) { vector result(numRows, vector()); for (int i = 0; i
解法 2 代码
class Solution2 { public: vector generate(int numRows) { vector 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
四、总结
这两种解法都通过对杨辉三角特性的理解,利用循环和数组操作来生成所需的杨辉三角。
解法 1 相对更简洁,通过一次初始化所有行并填充首尾元素为 1,再集中计算中间元素。
解法 2 则更具逻辑性,逐步处理每一行,先处理边界情况,再依次生成后续行。
两种解法在时间复杂度和空间复杂度上基本相同,时间复杂度为 O(numRows^2)),因为需要遍历杨辉三角的每一个元素;
空间复杂度同样为 (O(numRows^2)),用于存储生成的杨辉三角。
通过对这道题目的深入分析和实现,能够有效提升对数组操作和算法设计的能力。
- 当 numRows 大于 1 时,先将第一行 [1] 和第二行 [1, 1] 添加到 result 中。
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。