L24.【LeetCode笔记】 杨辉三角

news2025/7/4 20:22:34

目录

1.题目

2.分析

模拟二维数组的大致思想

杨辉三角的特点

二维数组的元素设置代码

 两个参数returnSize和returnColumnSizes

理解"有效"的含义

完整代码

提交结果


1.题目

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

2.分析

和在洛谷平台上(https://www.luogu.com.cn/problem/P5732)有所不同,LeetCode要求传一个二级指针回去

存储杨辉三角应该用二维数组,但是却不能在generate函数内初始化二维数组arr[m][n],因为返回后generate函数的栈帧空间会销毁,导致二维数组arr被销毁,返回的指针为野指针

因此必须用malloc,使用由二维数组的本质可知:需要使用指针数组来模拟二维数组

(二维数组复习:13.5.【C语言】二维数组)

模拟二维数组的大致思想

指针数组的每一个元素都指向杨辉三角每一行的第一个元素

可以用下图说明:设numRows==4

因此在malloc开辟时arr数组时,注意:开辟的空间==总行数*每个指针所占的内存空间

int**arr=(int**)malloc(sizeof(int*)*numRows);

还要设计每行所占的空间,可以利用循环

    for (int i=0;i<numRows ;i++)
    {
        arr[i]=(int*)malloc(sizeof(int)*(i+1));
    }

arr为二级指针,arr[i]变为一级指针(行指针)

杨辉三角的特点

观察下图可知,每行的第一个和最后一个元素均为1

二维数组的元素设置代码

    for (int i=0;i<numRows ;i++)
    {
        arr[i][0]=arr[i][i]=1;
        for (int j=1;j<i;j++)
        {
            arr[i][j]=arr[i-1][j-1]+arr[i-1][j];
        }
    }

注意:j从1开始循环,两个原因: ① 第一、二行不用执行arr[i][j]=arr[i-1][j-1]+arr[i-1][j] ② 每行的第一个元素已经提前被设置为1,从第二个元素开始设置

 两个参数returnSize和returnColumnSizes

这两个参数是为了方便LeetCode检查的,LeetCode需要知道你开辟的二维数组有多少行(returnSize),每一行有多少个"有效"列(ColumnSizes),换句话说,每一行有多少个"有效"元素

理解"有效"的含义

由于LeetCode不会进行智能检查,因此需要明确告诉LeetCode的检查元素的范围("有效"的范围)

例如下图:第0行只有数字1,需要告诉LeetCode1后面的内存空间不需要检查,非有效的内存单元

则(*returnColumnSizes)[0]=1;

returnSize告知LeetCode杨辉三角的行数numRows,则*returnSize=numRows

完整代码

将上述分析的代码段组合起来

int**generate(int numRows, int* returnSize, int** returnColumnSizes)
{
    *returnSize = numRows;
    *returnColumnSizes=(int*)malloc(sizeof(int)*numRows);
    int**arr=(int**)malloc(sizeof(int*)*numRows);
    for (int i=0;i<numRows ;i++)
    {
        arr[i]=(int*)malloc(sizeof(int)*(i+1));
        (*returnColumnSizes)[i]=i+1;
        arr[i][0]=arr[i][i]=1;
        for (int j=1;j<i;j++)//j从1开始原因是每行的第一个元素被填充为1
        {
            arr[i][j]=arr[i-1][j-1]+arr[i-1][j];
        }
    }
    return arr;
}

提交结果

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

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

相关文章

项目亮点案例

其实对我来说是日常操作&#xff0c;但是如果在面试的时候面试者能把日常的事情总结好发出来&#xff0c;其实足矣。 想让别人认同项目&#xff0c;选取的示例需要包含以下要素&#xff1a; 亮点项目四要素&#xff1a;明确的目标&#xff0c;问题点&#xff0c;解决方法和结果…

Vue.js组件(5):自定义组件

1 介绍 下面的所有组件全部基于VUE3 TS element plus编写&#xff0c;其中部分组件可能涉及到其他技术栈&#xff0c;会进行单独说明。 2 基础组件 2.1 表格操作组件TableToolButton 此组件用于对表格进行增加、编辑、删除、导出操作。 2.1.1 组件属性 addVisible&#x…

ctfhub技能树——disable_functions

LD_PRELOAD 来到首页发现有一句话直接就可以用蚁剑连接 根目录里有/flag但是不能看;命令也被ban了就需要绕过了 绕过工具在插件市场就可以下载 如果进不去的话 项目地址: #本地仓库;插件存放 antSword\antData\plugins 绕过选择 上传后我们点进去可以看到多了一个绕过的文件;…

【PCIe 总线及设备入门学习专栏 1.1 -- PCIe 基础知识 lane和link介绍】

文章目录 OverivewLane 和 LinkRC 和 RPPCIe controllerPCIE ControllerPHY模块 Inbound 和 OutboundPCIe transaction modelPIODMAP2P Overivew PCIe&#xff0c;即PCI-Express总线&#xff08;Peripheral Component Interconnect Express&#xff09;&#xff0c;是一种高速…

golang LeetCode 热题 100(动态规划)-更新中

爬楼梯 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 示例 1&#xff1a;输入&#xff1a;n 2 输出&#xff1a;2 解释&#xff1a;有两种方法可以爬到楼顶。 1. 1 阶 1 阶 2. 2 阶 示例 2&…

分布式专题(10)之ShardingSphere分库分表实战指南

一、ShardingSphere产品介绍 Apache ShardingSphere 是一款分布式的数据库生态系统&#xff0c; 可以将任意数据库转换为分布式数据库&#xff0c;并通过数据分片、弹性伸缩、加密等能力对原有数据库进行增强。Apache ShardingSphere 设计哲学为 Database Plus&#xff0c;旨在…

Vue 3.5 编写 ref 时,自动插入.Value

如果是 Vue 3.2 &#xff0c;那么可能用的是Volar

深度学习中的并行策略概述:2 Data Parallelism

深度学习中的并行策略概述&#xff1a;2 Data Parallelism 数据并行&#xff08;Data Parallelism&#xff09;的核心在于将模型的数据处理过程并行化。具体来说&#xff0c;面对大规模数据批次时&#xff0c;将其拆分为较小的子批次&#xff0c;并在多个计算设备上同时进行处…

OneCode:开启高效编程新时代——企业定制出码手册

一、概述 OneCode 的 DSM&#xff08;领域特定建模&#xff09;出码模块是一个强大的工具&#xff0c;它支持多种建模方式&#xff0c;并具有强大的模型转换与集成能力&#xff0c;能够提升开发效率和代码质量&#xff0c;同时方便团队协作与知识传承&#xff0c;还具备方便的仿…

《Web 应用项目开发:从构思到上线的全过程》

目录 一、引言 二、项目启动与需求分析 三、设计阶段 四、技术选型 五、开发阶段 六、测试阶段 七、部署与上线 八、维护与更新 九、总结 一、引言 在数字化浪潮席卷全球的当下&#xff0c;Web 应用如繁星般在互联网的苍穹中闪烁&#xff0c;它们形态各异&#xff0c…

中小学教室多媒体电脑安全登录解决方案

中小学教室多媒体电脑面临学生随意登录的问题&#xff0c;主要涉及到设备使用、网络安全、教学秩序等多个方面。以下是对这一问题的详细分析&#xff1a; 一、设备使用问题 1. 设备损坏风险 学生随意登录可能导致多媒体电脑设备过度使用&#xff0c;增加设备损坏的风险。不当…

Odoo 免费开源 ERP:通过 JavaScript 创建对话框窗口的技术实践分享

作者 | 老杨 出品 | 上海开源智造软件有限公司&#xff08;OSCG&#xff09; 概述 在本文中&#xff0c;我们将深入研讨如何于 Odoo 18 中构建 JavaScript&#xff08;JS&#xff09;对话框或弹出窗口。对话框乃是展现重要讯息、确认用户操作以及警示用户留意警告或错误的行…

OOP面向对象编程:类与类之间的关系

OOP面向对象编程&#xff1a;类与类之间的关系 三大关系&#xff1a;复合&#xff08;适配器设计模式&#xff09;、委托&#xff08;桥接设计模式&#xff09;、继承 8、1复合Composition has-a -> 适配器模式 一个类里面含有另一个类的对象 —> 复合关系 has-a 适配器设…

集成 jacoco 插件,查看单元测试覆盖率

文章目录 前言集成 jacoco 插件&#xff0c;查看单元测试覆盖率1. 添加pom2. 配置完成、执行扫描3. 执行结果4. 单元测试报告 前言 如果您觉得有用的话&#xff0c;记得给博主点个赞&#xff0c;评论&#xff0c;收藏一键三连啊&#xff0c;写作不易啊^ _ ^。   而且听说点赞…

下载运行Vue开源项目vue-pure-admin

git地址&#xff1a;GitHub - pure-admin/vue-pure-admin: 全面ESMVue3ViteElement-PlusTypeScript编写的一款后台管理系统&#xff08;兼容移动端&#xff09; 安装pnpm npm install -g pnpm # 国内 淘宝 镜像源 pnpm config set registry https://registry.npmmirror.com/…

创建用于预测序列的人工智能模型,设计模型架构。

上一篇&#xff1a;《创建用于预测序列的人工智能模型&#xff0c;设计数据集》 序言&#xff1a;在前一篇中&#xff0c;我们创建了用于训练人工智能模型的数据集。接下来&#xff0c;就要设计模型的架构了。其实&#xff0c;人工智能模型的开发关键并不在于代码量&#xff0…

ubuntu22.04安装PPOCRLabel

可使用的模型参考模型列表&#xff0c;ppocr版本这里PPOCR版本作为预训练模型&#xff1a; &#xff08;经常用放在这里&#xff09; 基础电脑配置&#xff1a; cunda12.4 ubuntu22.04系统 pytorch2.5.0 &#xff08;python3.10不能运行&#xff0c;python3.8我之前可以正…

Linux网络——TCP的运用

系列文章目录 文章目录 系列文章目录一、服务端实现1.1 创建套接字socket1.2 指定网络接口并bind2.3 设置监听状态listen2.4 获取新链接accept2.5 接收数据并处理&#xff08;服务&#xff09;2.6 整体代码 二、客户端实现2.1 创建套接字socket2.2 指定网络接口2.3 发起链接con…

江苏捷科云:可视化平台助力制造企业智能化管理

公司简介 江苏捷科云信息科技有限公司&#xff08;以下简称“捷科”&#xff09;是一家专注于云平台、云储存、云管理等产品领域的创新型企业&#xff0c;集研发、生产和销售于一体&#xff0c;致力于在网络技术领域打造尖端品牌。在推动制造业企业数字化转型的进程中&#xf…

消息队列(一)消息队列的工作流程

什么是消息队列 首先&#xff0c;代入一个场景&#xff0c;我现在做一个多系统的集成&#xff0c;分别有系统A、B、C、D四个系统&#xff0c;A系统因为使用产生了业务数据&#xff0c;B、C、D需要使用这些数据做相关的业务处理和运算&#xff0c;最基本的做法就是通过接口通信…