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

LeetCode 118题解 | 杨辉三角

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

相关文章:

  • 【Maniskill】训练使用的性能指标
  • 【5G学习】基本概念之多频资源以及子载波和信道
  • RabbitMQ 优先级队列详解
  • 自适应调度器:动态分配测试资源
  • kubernetes》》k8s》》ConfigMap 、Secret
  • 数据结构(3)
  • 一图掌握 MySQL 核心要点
  • 中国CRM系统推荐:如何选择最适合企业的客户管理工具?
  • 机器学习中 提到的张量是什么?
  • CS5346 - Task Abstraction and Task Taxonomy 任务抽象和分类
  • 聊聊类模板
  • 波束形成(BF)从算法仿真到工程源码实现-第九节-延迟相减波束形成(delay sub)
  • 【Vue】v-if和v-show的区别
  • 鸿蒙开发-注解
  • 实时语音交互数字人VideoChat,可自定义形象与音色,支持音色克隆,首包延迟低至3s
  • WebRTC实时通话EasyRTC嵌入式音视频通信SDK,构建智慧医疗远程会诊高效方案
  • 【C++进阶六】list模拟实现
  • ShareX:多功能截图与录屏工具
  • AD917X系列JESD204B MODE7使用
  • C++23 新特性:auto(x) 和 auto{x} 的衰变复制
  • 单位被裁定补缴12年社保,滞纳金该谁出?
  • 一季度煤价持续下探,多家煤炭巨头营收下滑、净利润降约两成
  • 去年立案侦办侵权假冒案件3.7万起,公安部公布13起案例
  • 龙头券商哪家强:中信去年营收领跑,中金净利下滑
  • 上海市统计局:经济运行开局平稳,高质量发展扎实推进
  • 魔都眼·上海车展②|小鹏汽车:何小鹏携手机器人车模首秀