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

LeetCode 算法:杨辉三角 c++

  • 原题链接🔗:杨辉三角
  • 难度:简单⭐️

题目

给定一个非负整数 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 <= numRows <= 30

杨辉三角

杨辉三角,又称帕斯卡三角形,是一种将二项式系数以三角形形式排列的数学图形。它在中国最早由北宋数学家贾宪在《释锁算术》中提出,后来南宋数学家杨辉在1261年所著的《详解九章算法》中进行了详细说明,并称之为“开方作法本源”图。杨辉三角不仅揭示了二项展开式的二项式系数的构成规律,还具有许多奇妙的性质,例如每行数字的对称性、中间数字最大等。

杨辉三角的递推公式是每个数等于它上方两个数之和,这一规律被称为杨辉三角的核心。在杨辉三角中,每行的数字之和为 2n - 1,其中 n
是行数,且第 n 行的第 m 个数可以表示为组合数 C(n-1, m-1)。

在欧洲,杨辉三角被称为帕斯卡三角形,因为法国数学家帕斯卡在1654年发现了这一规律,这比杨辉晚了393年,比贾宪晚了约600年。杨辉三角在数学、组合数学、概率论等领域都有广泛的应用,并且随着计算机技术的发展,其计算和应用变得更加便捷和高效。

另外,杨辉三角与文学中的宝塔诗和连环章等有着相似之处,展现了数学与文学的交融之美。在编程实现中,杨辉三角也较为容易构造,可以通过简单的递推算法来生成。

题解

  1. 解题思路:

杨辉三角,又称帕斯卡三角,是一个在数学中非常著名的几何图形,它由数字组成,每行的数字是上一行相邻数字的和。具体来说,杨辉三角的第0行是1,从第1行开始,每个数字是它正上方和左上方的数字之和。例如:

   11 11 2 1
1 3 3 1    
1 4 6 4 1 ... 

LeetCode上的杨辉三角问题通常要求你实现一个函数,根据输入的行数返回对应的杨辉三角行。以下是解决这个问题的一种思路:

  1. 初始化:首先,你需要一个二维数组来存储杨辉三角的每一行。数组的行数等于输入的行数rowIndex

  2. 填充第一行:杨辉三角的第一行总是[1],所以你可以初始化数组的第一行。

  3. 填充后续行:对于每一行,除了第一个和最后一个元素(它们都是1),其他元素都是其正上方和左上方元素的和。

  4. 边界条件:注意,每一行的第一个和最后一个元素都是1,这是杨辉三角的一个特性。

  5. 返回结果:最后,返回填充好的二维数组。

  1. c++ demo:
#include <iostream>
#include <vector>// 函数用于生成杨辉三角的前n行
void generatePascalTriangle(int n) {std::vector<std::vector<int>> triangle;for (int i = 0; i < n; ++i) {std::vector<int> row(i + 1, 1); // 每行开始和结束都是1triangle.push_back(row);// 计算中间的值for (int j = 1; j < i; ++j) {triangle[i][j] = triangle[i - 1][j - 1] + triangle[i - 1][j];}}// 打印杨辉三角for (const auto& row : triangle) {for (int num : row) {std::cout << num << " ";}std::cout << std::endl;}
}int main() {int numRows;std::cout << "Enter the number of rows for Pascal's Triangle: ";std::cin >> numRows;generatePascalTriangle(numRows);return 0;
}
  • 输出结果:

Enter the number of rows for Pascal’s Triangle: 9
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1

  1. 代码仓库地址:generatePascalTriangle

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Python——类和对象、继承和组合
  • 软考:软件设计师 — 17.程序设计语言与语言处理程序基础
  • IDEA: Html代码格式化
  • 【基础】Three.js中添加操作面板,GUI可视化调试(附案例代码)
  • Java-多线程IO工具类
  • MySQL入门学习-对系统数据库的常用查询
  • midwayjs 框架使用 rabbitmq 消息延迟
  • ES 根据条件删除文档
  • 【Python入门】第5节 数据容器
  • 分布式云扩展 AI 边缘算力,助力用户智能化创新
  • [Linux#47][网络] 网络协议 | TCP/IP模型 | 以太网通信
  • Apache RocketMQ 中文社区全新升级丨阿里云云原生 7 月产品月报
  • Xor Sigma Problem
  • CSS系列之浮动清除clear(三)
  • 数据库mysql集群主从、高可用MGR、MHA技术详解
  • [原]深入对比数据科学工具箱:Python和R 非结构化数据的结构化
  • 【MySQL经典案例分析】 Waiting for table metadata lock
  • conda常用的命令
  • Docker下部署自己的LNMP工作环境
  • JavaScript DOM 10 - 滚动
  • JavaScript-Array类型
  • Js基础知识(四) - js运行原理与机制
  • learning koa2.x
  • Linux编程学习笔记 | Linux IO学习[1] - 文件IO
  • React的组件模式
  • STAR法则
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 浏览器缓存机制分析
  • 使用 Node.js 的 nodemailer 模块发送邮件(支持 QQ、163 等、支持附件)
  • 为物联网而生:高性能时间序列数据库HiTSDB商业化首发!
  • MPAndroidChart 教程:Y轴 YAxis
  • Nginx惊现漏洞 百万网站面临“拖库”风险
  • ​RecSys 2022 | 面向人岗匹配的双向选择偏好建模
  • ​力扣解法汇总946-验证栈序列
  • ​人工智能书单(数学基础篇)
  • # 消息中间件 RocketMQ 高级功能和源码分析(七)
  • #LLM入门|Prompt#1.7_文本拓展_Expanding
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • (33)STM32——485实验笔记
  • (vue)el-tabs选中最后一项后更新数据后无法展开
  • (附源码)spring boot基于Java的电影院售票与管理系统毕业设计 011449
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (五)大数据实战——使用模板虚拟机实现hadoop集群虚拟机克隆及网络相关配置
  • (转)Unity3DUnity3D在android下调试
  • ./configure,make,make install的作用
  • ./configure、make、make install 命令
  • .equal()和==的区别 怎样判断字符串为空问题: Illegal invoke-super to void nio.file.AccessDeniedException
  • .NET Core 将实体类转换为 SQL(ORM 映射)
  • .net安装_还在用第三方安装.NET?Win10自带.NET3.5安装
  • .NET设计模式(7):创建型模式专题总结(Creational Pattern)
  • @Conditional注解详解
  • @我的前任是个极品 微博分析
  • [17]JAVAEE-HTTP协议