Leetcode 119 杨辉三角 II

news2024/9/21 7:31:56

目录

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

一、问题描述

  给定一个非负索引 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,初始数组的行数为numRows
        for (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;//每一行的起始位置和末尾位置为1
            for (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);
        //初始化为所需得到的数组长度,默认值为0
        row[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://www.coloradmin.cn/o/1616947.html

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

相关文章

SpringBoot+layuimini实现左侧菜单动态展示

layuimini左侧菜单动态显示 首先我们看一下layuimini的原有菜单显示格式 {"homeInfo": {"title": "首页","href": "page/welcome-2.html?t2"},"logoInfo": {"title": "LAYUI MINI","…

苍穹外卖day8(2)用户下单、微信支付

文章目录 前言一、用户下单1. 业务流程2. 接口设计3. 数据库设计3.1 订单表orders3.2 订单明细表 order_detail 4. 代码实现 二、订单支付 前言 用户下单 因为订单信息中包含了其他业务中的数据&#xff0c;在逻辑处理中涉及了多个其他业务&#xff0c;比如要判断地址簿、购物…

ThreeJs模拟工厂生产过程一

上节我们已经通过绘制两条长方体和多个圆柱体成功绘制出传送带&#xff0c;今天根据之前的传送带做个简单的工厂车间生产的demo&#xff0c;然后再不断完善它。 首先分析下工厂生产有哪些部分组成&#xff0c;工厂内是产线&#xff0c;产线需要有设备&#xff0c;传送带以及生产…

要养生也要时尚,益百分满足你的所有需求

要养生也要时尚&#xff0c;益百分满足你的所有需求 艾灸是个好东西&#xff0c;尤其是在近几年的时候&#xff0c;艾灸就像一阵浪潮席卷进了人们的日常生活之中&#xff0c;我们可以在街边看到大大小小的艾灸馆&#xff0c;有些评价比较高的艾灸馆门前甚至还排起了长长的队伍…

Langchain入门到实战-第四弹

Langchain入门到实战 Langchain中的提示词官网地址Langchain概述Langchain的提示词用法更新计划 Langchain中的提示词 语言模型提示模板是预定义的生成语言模型提示的方法。模板可能包括指令、少样本示例、特定任务的上下文和问题。LangChain 提供了创建和处理提示模板的工具。…

TS-namespace(命名空间)#记录

一、命名空间 1、ts 中的 “命名空间” 就是之前的 “内部模块”&#xff0c;任何使用 module 关键字来声明一个内部模块的地方都应该使用 namespace 关键字来替换。 // ts 中的“内部模块” &#xff08;废弃&#xff09; module X { }// ts 中的“命名空间” &#xff08…

系统启动修复和SYSTEM丢失损坏故障处理

系统启动修复和SYSTEM丢失损坏故障处理 一、问题描述 你的电脑/设备需要修复。无法加载应用程序或操作系统&#xff0c;原因是所需文件丢失或包含错误。 文件:\Windows\system32\winload.exe 错误代码: 0xc000000e 二、问题分析 1.查询winload.exe是win7或者win10以上系统…

NX二次开发UF_LAYER(图层相关操作)常用函数

目录 一、概述 二、函数的介绍 2.1 UF_LAYER_ask_category_info &#xff08;查询图层类别信息&#xff09; 2.2 UF_LAYER_ask_category_tag&#xff08;查询图层类别TAG&#xff09; 2.3 UF_LAYER_ask_status&#xff08;查询图层的状态&#xff09; 2.4 UF_LAYER_ask_wo…

护眼灯到底有用吗?实用护眼灯十大品牌推荐

护眼灯有用吗&#xff1f;答案无疑是肯定的。选购到一款合适的护眼台灯&#xff0c;益处多多。这些台灯经过精心设计&#xff0c;运用变频电子镇流器技术&#xff0c;显著提高了光线的频率&#xff0c;使之远超人眼的反应速度&#xff0c;从而有效缓解视觉疲劳。此外&#xff0…

适用于手机蓝牙的热敏晶体FA1612AS

EPSON推出的一款1612小尺寸无源热敏晶体:FA1612AS。FA1612AS的额定频率为38.4Mhz的晶体单元&#xff0c;采用无铅材料&#xff0c;符合ROHS标准&#xff0c;内置热敏电阻&#xff0c;可用于移动电话&#xff0c;蓝牙等。热敏晶体FA1612AS的产品特性:额定频率:38.4MHZ外部尺寸规…

Git 仓库内容操作

Git 仓库内容操作 | CoderMast编程桅杆Git 仓库内容操作 添加文件到暂存区 使用如下指令将工作区的文件添加到暂存区&#xff0c;告诉 Git 在下次 commit 时哪些文件做出了修改。 commit 指令详看后续 添加一个或多个文件到暂存区&#xff1a; 添加指定目录到暂存区 添加当前目…

山海鲸电力看板:运维数据一目了然

在信息化高速发展的今天&#xff0c;电力行业的运维管理也迎来了前所未有的变革。山海鲸可视化智慧电力运维可视化看板&#xff0c;以其独特的数据整合能力和直观的可视化效果&#xff0c;成为了电力行业运维管理的得力助手&#xff0c;为电力的稳定运行提供了强大的技术支撑。…

namesilo注册与域名购买教程

namesilo 是目前价格较便宜的国外域名平台&#xff0c;Paypal、Visa 等多种付款方式&#xff0c;还可以免费使用域名隐私保护&#xff0c;性价比非常之高。 1. 访问namesilo.com并注册用户账号。 邮箱可以填 QQ 邮箱&#xff0c;国家选择 China&#xff0c;注册信息尽量真实。…

开发同城O2O跑腿系统源码:构建高效便捷的本地服务平台教程

为了满足用户对便捷的需求&#xff0c;今天我们将一同探讨如何开发一个高效便捷的同城O2O跑腿系统&#xff0c;以构建一个功能全面、操作简单的本地服务平台。 一、确定需求和功能 在开发同城O2O跑腿系统之前&#xff0c;首先需要明确系统的需求和功能。用户可以通过该系统发布…

Mamba模型原理与代码精讲

课程链接&#xff1a;Mamba模型原理与代码精讲_在线视频教程-CSDN程序员研修院 Mamba模型是最近提出的可匹敌甚至超越Transformer的前沿序列模型。 Mamba引入了选择性状态空间模型(SSM), 允许SSM参数成为输入的函数&#xff0c;使得模型能够根据输入token沿着序列长度维度选择…

Ubuntu下使用VisualStudioCode进行Java开发

0-1开始Java语言编程之路 一、Ubuntu下Java语言环境搭建 二、Ubuntu下Docker环境安装 三、使用Docker搭建本地Nexus Maven私有仓库 四、Ubuntu下使用VisualStudioCode进行Java开发 Visual Studio Code 下载 点击这个链接Visual Studio Code&#xff0c;进入VisualStudioCode的…

未来已来:解锁AGI的无限潜能与挑战

未来已来&#xff1a;解锁AGI的无限潜能与挑战 引言 假设你有一天醒来&#xff0c;发现你的智能手机不仅提醒你今天的日程&#xff0c;还把你昨晚做的那个奇怪的梦解释了一番&#xff0c;并建议你可能需要减少咖啡摄入量——这不是科幻电影的情节&#xff0c;而是人工通用智能…

ubuntu apt update:The repository ‘xxx‘ is not signed.报错解决办法(未解决)

文章目录 报错原因及解决办法 报错 rootjax:~# apt update Get:1 file:/var/cuda-repo-l4t-11-4-local InRelease [1575 B] Get:2 file:/var/cudnn-local-repo-ubuntu2004-8.4.1.50 InRelease [1575 B] Get:1 file:/var/cuda-repo-l4t-11-4-local InRelease [1575 B] Get:2 …

C/C++ 入门(7)string类(STL)

个人主页&#xff1a;仍有未知等待探索-CSDN博客 专题分栏&#xff1a;C 请多多指教&#xff01; 目录 一、标准库中的string 1、了解 2、string类常用接口说明 1、常见的构造函数 2、容量操作 ​编辑 3、访问及遍历操作 4、修改操作 5、非成员函数 二、string类实现 …

电脑回收站恢复,3个靠谱方法(2024版)

“想问问大家&#xff0c;回收站里丢失的文件还能恢复吗&#xff1f;我一不小心就把电脑回收站里的重要数据丢失了&#xff0c;现在不知道怎么操作才能恢复它了。希望大家帮帮我。” 在日常使用电脑的过程中&#xff0c;回收站是我们经常打交道的一个功能&#xff0c;它能帮助我…