Leetcode 119 杨辉三角 II

目录

  • 一、问题描述
  • 二、示例及约束
  • 三、代码
    • 方法一:递推
    • 方法二:线性递推
  • 四、总结

一、问题描述

  给定一个非负索引 rowIndex,返回「杨辉三角」的第 rowIndex 行。
  在「杨辉三角」中,每个数是它左上方和右上方的数的和。
  自我注解:实际上rowIndex是从0开始的
在这里插入图片描述

二、示例及约束

示例 1:
输入: rowIndex = 3
输出: [1,3,3,1]

示例 2:
输入: rowIndex = 0
输出: [1]

示例 3:
输入: rowIndex = 1
输出: [1,1]

提示:
● 1 <= numRows <= 33

三、代码

方法一:递推

class Solution {
public:vector<vector<int>> generate(int rowIndex) {vector<vector<int>> ret(rowIndex + 1);//创建二维数组ret,初始数组的行数为numRowsfor (int i = 0; i <= rowIndex; i++) {ret[i].resize(i + 1);//每行初始化为i + 1列ret[i][0] = ret[i][i] = 1;  //每行最左和最右元素固定为1/*每个数是它左上方和右上方的数的和for (int j = 1; j < i; ++j) {ret[i][j] = ret[i - 1][j] + ret[i - 1][j - 1];}*/for (int j = 1; j <= i / 2; j++) {//对于杨辉三角而言,左右是对称的,因此遍历一半即可ret[i][j] = ret[i - 1][j -1] + ret[i - 1][j];if (i - j != j) {//当i是奇数的时候,最中间的数是加法得到的,不能对称赋值得到ret[i][i - j] = ret[i][j];//对称赋值}}}return ret[rowIndex];}
};//由于对第 i+1 行的计算仅用到了第 i 行的数据,用滚动数组进行优化
class Solution {
public:vector<int> getRow(int rowIndex) {//由于只用到了上一行的数据,因此只需要一维数组存储//pre用来表示上一行的数组,cur用来表示现在这一行的数据vector<int> pre, cur;for (int i = 0; i <= rowIndex; ++i) {cur.resize(i + 1);//初始化数组长度cur[0] = cur[i] = 1;//每一行的起始位置和末尾位置为1for (int j = 1; j < i; ++j) {cur[j] = pre[j - 1] + pre[j];//每个数是它左上方和右上方的数的和}pre = cur;//更新上一行数组信息}return pre;//最后的pre更新后就是cur}
};//继续优化,可以只用一个数组,利用递推式Cn{i}=Cn-1{i} + Cn-1{i-1}
class Solution {
public:vector<int> getRow(int rowIndex) {vector<int> row(rowIndex + 1);//初始化为所需得到的数组长度,默认值为0row[0] = 1;/*对于下面循环的操作,每一行的元素都是基于它之前的行计算得出的。比如要得到第四行的[1,3,3,1],在此之前第三行是[1,2,1,0],第二行是[1,1,0,0],第一行是[1,0,0,0]。这个方法中,只用到了一个数组存储,所以相当于是在上一行的基础上来更新数组,模拟杨辉三角的加法方式。*/for (int i = 1; i <= rowIndex; ++i) {for (int j = i; j > 0; --j) {//从后往前更新row[j] += row[j - 1];//更新值,在自身的值上加前一个值}}return row;}
};

方法二:线性递推

//利用组合数公式Cn{m} = Cn{m-1} * (n-m-1) / m,其中Cn{0} = 1
class Solution {
public:vector<int> getRow(int rowIndex) {vector<int> row(rowIndex + 1);row[0] = 1;for (int i = 1; i <= rowIndex; ++i) {//通过组合数公式,可以得到同一行的相邻组合数的关系row[i] = 1LL * row[i - 1] * (rowIndex - i + 1) / i;/*1LL 是一个整数字面量,它表示一个长整型(long long)的数字 1。使用 1LL 的原因是为了确保在后面的乘法操作中,至少有一个操作数是长整型,从而避免在整数乘法中发生溢出,并确保整个表达式的结果也是长整型,这样整个乘法表达式的结果也将是 long long 类型的,从而能够容纳更大的数值。*/}return row;}
};

四、总结

时间复杂度:
方法一:O( r o w I n d e x 2 rowIndex^2 rowIndex2)。
方法二:O( r o w I n d e x rowIndex rowIndex)。
空间复杂度:
方法一:O(1),不考虑返回的数组空间。
方法二:O(1),不考虑返回的数组空间。

方法时间复杂度空间复杂度
方法一O( r o w I n d e x 2 rowIndex^2 rowIndex2)O(1)
方法二O( r o w I n d e x rowIndex rowIndex)O(1)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2978483.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

运行Java或Python的时候,Git是必要的吗?

在运行Java或Python代码时&#xff0c;Git并不是必需的&#xff0c;但它可以成为一个非常有用的工具&#xff0c;特别是在团队协作、版本控制和代码管理方面。 Git的作用和优势 版本控制&#xff1a; Git是一个分布式版本控制系统&#xff0c;可以跟踪文件的更改历史&#xff…

CodeGemma初探

什么是 CodeGemma CodeGemma是一系列强大而轻量级的模型的集合&#xff0c;可以执行各种编码任务&#xff0c;包括填充中间代码补全、代码生成、自然语言理解、数学推理和指令跟随。 版本&#xff1a; instruct&#xff1a;7B, 这个版本专门针对自然语言到代码聊天和指令跟随…

租房管理|基于SprinBoot+vue的租房管理系统(源码+数据库+文档)

租房管理目录 基于SprinBootvue的租房管理系统 一、前言 二、系统设计 三、系统功能设计 前台 后台 管理员 订单信息管理 屋主申诉管理 屋主权限 房源信息管理 订单信息管理 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获…

阿里云mysql8.0 this is incompatible withsql mode=only full group by

阿里云RDS中mysql5.6升级为8.0后&#xff0c;出现如下问题&#xff1a; ### Error querying database. Cause:java.sql.SQLSyntaxErrorException: Expression #1 of SELECT listis not in GROUP BY clause and contains nonaggregatedcolumn temp.product_id which is not fun…

陪诊小程序开发:守护健康,温暖陪伴每一步

在繁忙的都市生活中&#xff0c;每个人都可能面临就医的困扰。面对陌生的医院环境、复杂的就诊流程&#xff0c;很多人感到无助和迷茫。陪诊小程序的开发&#xff0c;旨在通过科技与服务的融合&#xff0c;为用户带来更加贴心、便捷的陪诊体验&#xff0c;守护健康&#xff0c;…

编译支持播放H265的cef控件

接着在上次编译的基础上增加h265支持编译支持视频播放的cef控件&#xff08;h264&#xff09; 测试页面&#xff0c;直接使用cef_enhancement,里边带着的那个html即可&#xff0c;h265视频去这个网站下载elecard,我修改的这个版本参考了里边的修改方式&#xff0c;不过我的这个…

web前端学习笔记1

前端学习笔记 1. 走进HTML 1.1 什么是HTML 超文本标记语言(英语:HyperText Markup Language,简称:HTML)是一种用于创建网页的标准标记语言。您可以使用 HTML 来建立自己的 WEB 站点,HTML 运行在浏览器上,由浏览器来解析。HTML文档的后缀名 .html.htm以上两种后缀名没有区别…

Mediasoup-demo 本地启动步骤(超详细)

Mediasoup-demo 本地启动步骤&#xff08;超详细&#xff09; 一.本人环境 系统&#xff1a;macos13.6.3 node: v16.20.2 npm:8.19.4 python: 3.9.6 二.下载代码 git 下载代码&#xff1a; git clone gitgithub.com:versatica/mediasoup-demo.git 三.代码介绍 下载下来…

第⑮讲:Ceph集群管理与监控操作指南

文章目录 1.查看集群的状态信息2.动态的查看集群的状态信息3.查看集群的利用率4.查看OSD的资源利用率5.查看OSD的列表6.查看各组件的状态7.查看集群的仲裁信息8.查看/修改集群组件sock的配置参数 1.查看集群的状态信息 通过集群状态信息可以看到集群的健康状态、各个组件的运行…

实时数仓选型

实时数仓选型 实时数仓选型第一版实时数仓选型第二版 实时数仓选型第一版 实时数仓分层: 计算框架:Flink;存储框架:消息队列(可以实时读取&可以实时写入)ODS:Kafka 使用场景:每过来一条数据,读取到并加工处理DIM: HBase 使用场景:事实表会根据主键获取一行维表数据(1.永…

【AI】如何让局域网PC能够访问langchain框架的AI服务

【背景】 在单位内部成功运行了langchain服务&#xff0c;但是发现本地可以用默认8000端口访问&#xff0c;但是局域网内其它机器却无法访问服务页面。 【分析】 首先查看项目文件夹中的server.py。由于这个server.py的存在&#xff0c;我一开始以为langchain整套框架的服务…

成都直播基地服务|企业入驻天府锋巢直播产业基地到底有什么优势?

天府锋巢直播产业基地&#xff0c;作为天府新区新兴的直播产业聚集地&#xff0c;吸引了众多企业的关注与入驻。那么&#xff0c;企业入驻天府锋巢直播产业基地到底有哪些优势呢&#xff1f;本文将从多个方面进行深入剖析。 一、基地链主无锋科技作为直播行业的领军企业&#x…

基于若依和flowable7.0.1的ruoyi-nbcio-plus流程管理系统正式发布

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 http://122.227.135.243:9666/ 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码&#xff1a…

Day10-Java进阶-泛型数据结构(树)TreeSet 集合

1. 泛型 1.1 泛型介绍 package com.itheima.generics;import java.util.ArrayList; import java.util.Iterator;public class GenericsDemo1 {/*泛型介绍 : JDK5引入的, 可以在编译阶段约束操作的数据类型, 并进行检查注意 : 泛型默认的类型是Object, 且只能接引用数据类型泛型…

钻刀无忌,过孔莫愁

高速先生成员--姜杰 钻刀是冷的&#xff0c;单板是冷的&#xff0c;眼见着过孔阻抗居高不下&#xff0c;雷豹的心也越来越冷…… 雷豹最近在研究过孔&#xff0c;少不了先学习相关的理论&#xff1a;过孔作为信号路径上一个重要的阻抗突变点&#xff0c;相对于传输线的特征阻抗…

如何用微信小程序实现远程控制墙壁插座

如何用微信小程序实现远程控制墙壁插座呢&#xff1f; 本文描述了使用微信小程序调用HTTP接口&#xff0c;实现控制墙壁插座&#xff0c;替换原有插座&#xff0c;安装智能插座后&#xff0c;即可实现远程控制。 可选用产品&#xff1a;可根据实际场景需求&#xff0c;选择对应…

社区奶柜的便捷与创新

在快节奏的现代生活中&#xff0c;无人零售技术如自动售货机已成为一种普遍现象&#xff0c;为消费者提供便捷的购物体验。社区奶柜&#xff0c;作为这一趋势中的一部分&#xff0c;不仅优化了日常购物流程&#xff0c;而且还在提升社区服务质量上发挥了重要作用。 1. 社区奶柜…

GPU深度学习环境搭建:Win10+CUDA 11.7+Pytorch1.13.1+Anaconda3+python3.10.9

1. 查看显卡驱动及对应cuda版本关系 1.1 显卡驱动和cuda版本信息查看方法 在命令行中输入【nvidia-smi】可以当前显卡驱动版本和cuda版本。 根据显示,显卡驱动版本为:Driver Version: 516.59,CUDA 的版本为:CUDA Version 11.7。 此处我们可以根据下面的表1 显卡驱动和c…

日志框架整合SpringBoot保姆级教程+日志文件拆分(附源码)

介绍 日志概述 只要程序员投身在实际的学习和生产环境中&#xff0c;就会对日志的重要性有着充分的认知&#xff0c;尤其是对于 Web 以及更高级的应用。在很多情况下&#xff0c;日志可能是我们了解应用如何执行的唯一方式。 但是现实是很多程序员对于日志的记录的认知比较肤…

双链向表专题

1.链表的分类 链表的种类非常多组合起来就有 2 2 8种 链表说明&#xff1a; 虽然有这么多的链表的结构&#xff0c;但是我们实际中最常⽤还是两种结构&#xff1a; 单链表 和 双向带头循环链表 1. 无头单向⾮循环链表&#xff1a;结构简单&#xff0c;⼀般不会单独⽤来存数…