LeetCode 118题解 | 杨辉三角

news2025/4/17 6:53:33

题目链接: https://leetcode.cn/problems/pascals-triangle/description/

题目如下:

在这里插入图片描述

解题过程如下:

杨辉三角就是一个不规则的二维数组,实际上是一个直角三角形。如图所示:

在这里插入图片描述

杨辉三角特点:每一行的第一个和最后一个都是1,中间这些位置的数值等于上一行同下标的数值和前一个下标的数值之和。

这道题用C++实现比用C语言实现简单很多,我们先来看看用C语言实现的难度在哪?

题中说了所有的数组都需要动态开辟及其用完后释放,用C语言怎么动态开辟二维数组呢?——指针数组

指针数组就是存放指针的数组,在本题中存储的是整型指针的数组,数据个数是行数,这个数组当中的每一个指针都需要动态开辟一块空间存储各行数据。

在这里插入图片描述

代码中涉及二级指针、动态开辟以及释放,参数理解上也很困难。

而C++提供的代码就很简洁:

在这里插入图片描述

但是这里有一个相较陌生的类型vector<vector<int>>,vector< vector < int >>相当于实例化出了两个类:

在这里插入图片描述

在这里插入图片描述

完整代码如下:

class Solution {
public:
    vector<vector<int>> generate(int numRows) {
        vector<vector<int>> vv(numRows);// 可以用构造开数组
        // 也可以用resize开数组
        /*vector<vector<int>> vv;
        vv.resize(numRows);*/
        // 二维数组的每个数据都为1
        for (size_t i = 0; i < numRows; i++)
        {
            // vv.[i]表示下标为i的vector<int>对象,给每个vector<int>对象插入数据
            vv[i].resize(i + 1, 1);
        }
        // 中间的位置的值等于上一行里同下标的值和前一个下标的值之和
        for (size_t i = 0; i < numRows; i++)
        {
            // 每一行的第一个值和最后一个值已经是1了,不用管
            for (size_t j = 1; j < vv[i].size() - 1; j++)
            {
                vv[i][j] = vv[i - 1][j] + vv[i -1][j - 1];
            }
        }
        return vv;
    }
};

由此可见,vector< vector < int >>底层相当于是int的二维数组。相较于C语言,用C++实现就不用开二维数组的空间,直接调用vector的接口就行,也不需要返回二维数组有多少行,每一行有多少个。

简单解释一下vv[i][j]

在这里插入图片描述

C语言中用下标[]访问本质是解引用。这里访问是调用了两次函数,效率会怎么样呢?因为是高频调用的短小函数,必然会把这两个运算符重载定义在类里成为内联,所以效率问题不用担心。

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

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

相关文章

『Kubernetes(K8S) 入门进阶实战』实战入门 - Pod 详解

『Kubernetes(K8S) 入门进阶实战』实战入门 - Pod 详解 Pod 结构 每个 Pod 中都可以包含一个或者多个容器&#xff0c;这些容器可以分为两类 用户程序所在的容器&#xff0c;数量可多可少Pause 容器&#xff0c;这是每个 Pod 都会有的一个根容器&#xff0c;它的作用有两个 可…

数据库索引深度解析:原理、类型与高效使用实践

&#x1f9e0; 一句话理解索引是什么&#xff1f; 索引就是数据库中的“目录”或“书签”&#xff0c;它能帮助我们快速找到数据的位置&#xff0c;而不是一页页地翻整本书。 &#x1f9e9; 一、为什么需要索引&#xff1f;&#xff08;用生活化例子秒懂&#xff09; 想象你在…

React 记账本项目实战:多页面路由、Context 全局

在本文中,我们将分享一个使用 React 开发的「记账本」项目的实战经验。该项目通过 VS Code 完成,包含首页、添加记录页、编辑页等多个功能页面,采用了 React Router 实现路由导航,使用 Context API 管理全局的交易记录状态,并引入数据可视化组件呈现不同月份的支出情况。项…

易路iBuilder智能体平台:人力资源领域AI落地,给“数据权限管控”一个最优解

近日&#xff0c;加拿大电子商务巨头Shopify的CEO Tobias Ltke分享了一份内部备忘录&#xff0c;明确表示有效使用AI已成为公司对每位员工的基本期望&#xff0c;并指出&#xff1a;各团队在招募新员工前&#xff0c;必须先确定是否能够利用AI完成工作。 而在全球范围内&#…

mybatis--多对一处理/一对多处理

多对一处理&#xff08;association&#xff09; 多个学生对一个老师 对于学生这边&#xff0c;关联&#xff1a;多个学生&#xff0c;关联一个老师[多对一] 对于老师而言&#xff0c;集合&#xff0c;一个老师有多个学生【一对多】 SQL&#xff1a; 测试环境搭建 1.导入依…

计算机视觉——图像金字塔与目标图像边缘检测原理与实践

一、两个图像块之间的相似性或距离度量 1.1 平方差和&#xff08;SSD&#xff09; 平方差和&#xff08;SSD&#xff09; 是一种常用的图像相似性度量方法。它通过计算两个图像在每个对应位置的像素值差的平方和来衡量两个图像之间的整体差异。如果两个图像在每个位置的像素值…

VRoid-Blender-Unity个人工作流笔记

流程 VRoid 选配模型>减面、减材质>导出vrm Blender&#xff08;先有CATS、vrm插件&#xff09; 导入vrm>Fix model>修骨骼>导出fbx Unity 找回贴图、改着色器、调着色器参数…… VRoid 减面 以模型不出现明显棱角为准。脸好像减面100也问题不大。 下…

Domain Adaptation领域自适应

背景与问题定义 传统监督学习假设&#xff1a;训练集与测试集数据分布一致。 Domain Shift&#xff1a;测试数据分布与训练数据不同&#xff0c;模型泛化性能骤降 。 例如在黑白图像上训练数字分类器&#xff0c;测试时用彩色图像&#xff0c;准确率骤降。 Domain Adaptatio…

从自动测量、8D响应到供应链协同的全链路质量管理数字化方案——全星QMS如何破解汽车行业质量困局

全星QMS如何破解汽车行业质量困局&#xff1a;从自动测量、8D响应到供应链协同的全链路数字化方案 在当今竞争激烈的市场环境中&#xff0c;企业要想脱颖而出&#xff0c;必须确保产品质量的稳定性和可靠性。 全星质量QMS软件系统凭借其强大的功能和灵活的架构&#xff0c;为企…

联想电脑开机出现Defalut Boot Device Missing or Boot Failed怎么办

目录 一、恢复bios默认设置 二、关机重启 三、“物理”方法 在图书馆敲代码时&#xff0c;去吃了午饭回来发现刚开机就出现了下图的问题&#xff08;崩溃&#xff09;&#xff0c;想起之前也发生过一次 这样的问题&#xff0c;现在把我用到的方法写在下面&#xff0c;可能对…

SQL学习笔记-聚合查询

非聚合查询和聚合查询的概念及差别 1. 非聚合查询 非聚合查询&#xff08;Non-Aggregate Query&#xff09;是指不使用聚合函数的查询。这类查询通常用于从表中检索具体的行和列数据&#xff0c;返回的结果是表中的原始数据。 示例 假设有一个名为 employees 的表&#xff…

【Vue 3 + Element Plus 实现产品标签的动态添加、删除与回显】

&#x1f680;Vue 3 Element Plus 实现产品标签的动态添加、删除与回显 在后台管理系统中&#xff0c;我们经常需要对表单数据进行动态处理&#xff0c;尤其是类似“产品标签”这样的字段&#xff0c;它需要用户能够灵活添加、删除&#xff0c;并在编辑时自动回显。今天我们就…

IntelliJ 配置(二)配置相关类库(2)LineMarkerProvider

一、介绍 LineMarkerProvider 是 IntelliJ 平台插件开发中的一个接口&#xff0c;它的作用是在编辑器左侧的“行标记区域”&#xff08;就是代码行号左边那一栏&#xff09;添加各种图标、标记或导航链接。比如Java 类中看到的&#xff1a; 小绿色三角形&#xff08;可以点击运…

从零开始学java--线性表

数据结构基础 目录 数据结构基础 线性表 顺序表 链表 顺序表和链表的区别&#xff1a; 栈 队列 线性表 线性表&#xff08;linear list&#xff09;是n个具有相同特性的数据元素的有限序列。 线性表中的元素个数就是线性表的长度&#xff0c;表的起始位置称为表头&am…

AD917X系列JESD204B MODE7使用

MODE7特殊在F8&#xff0c;M4使用2个复数通道 CH0_NCO10MHz CH1_NCO30MHZ DP_NCO50MHz DDS1偏移20MHz DDS2偏移40MHz

Spring Cloud之远程调用OpenFeign最佳实践

目录 OpenFeign最佳实践 问题引入 Feign 继承方式 创建Module 引入依赖 编写接口 打Jar包 服务提供方 服务消费方 启动服务并访问 Feign 抽取方式 创建Module 引入依赖 编写接口 打Jar包 服务消费方 启动服务并访问 服务部署 修改pom.xml文件 观察Nacos控制…

【Python爬虫】详细入门指南

目录 一、简单介绍 二、详细工作流程以及组成部分 三、 简单案例实现 一、简单介绍 在当今数字化信息飞速发展的时代&#xff0c;数据的获取与分析变得愈发重要&#xff0c;而网络爬虫技术作为一种能够从互联网海量信息中自动抓取所需数据的有效手段&#xff0c;正逐渐走入…

Win11系统 VMware虚拟机 安装教程

Win11系统 VMware虚拟机 安装教程 一、介绍 Windows 11是由微软公司&#xff08;Microsoft&#xff09;开发的操作系统&#xff0c;应用于计算机和平板电脑等设备 。于2021年6月24日发布 &#xff0c;2021年10月5日发行 。 Windows 11提供了许多创新功能&#xff0c;增加了新…

打造AI应用基础设施:Milvus向量数据库部署与运维

目录 打造AI应用基础设施&#xff1a;Milvus向量数据库部署与运维1. Milvus介绍1.1 什么是向量数据库&#xff1f;1.2 Milvus主要特点 2. Milvus部署方案对比2.1 Milvus Lite2.2 Milvus Standalone2.3 Milvus Distributed2.4 部署方案对比表 3. Milvus部署操作命令实战3.1 Milv…

【深度学习与大模型基础】第11章-Bernoulli分布,Multinoulli分布

一、Bernoulli分布 1. 基本概念 想象你抛一枚硬币&#xff1a; 正面朝上&#xff08;记为 1&#xff09;概率是 p&#xff08;比如 0.6&#xff09;。 反面朝上&#xff08;记为 0&#xff09;概率是 1-p&#xff08;比如 0.4&#xff09;。 这就是一个Bernoulli分布&…