力扣题目的参数解释(力扣初用者必看指南)

导入:

题目来源:leetcode 867 转置矩阵

参数列表:

int** matrix

int matrixSize

int* matrixColSize

int* returnSize

int** returnColumnSizes

模仿main()函数

完整代码

运行结果

最后本题的AC答案

结语:


导入:

相信初次刷力扣的同学经常会因为题目所给的参数看不懂,导致从入门到入土,例如下面这个题目,相信有一些同学已经汗流浃背了。


不过没有关系今天写这个文章就是为了解决这个问题,让大家更好的融入力扣大家庭(上头上头✌)。

首先我先给出我的题目来源,这个变量算比较复杂的,所以也比较有代表性。

题目来源:leetcode 867 转置矩阵

那我们开始咯(yeyeye):

参数列表:

int** matrix

int matrixSize

int* matrixColSize

int* returnSize

int** returnColumnSizes

在刷题的时候题目一定要好好看这种信息也不能放过

翻译如下:

/**

*返回一个大小为*returnSize的数组数组。

*数组的大小以*returnColumnSizes数组的形式返回。

*注意:返回的数组和*columnSizes数组都必须进行mallocated,假设调用者调用free()。

*/


看到这里相信有些朋友就有些想法了吧(没有也没有关系,我会给你将清楚的)

int** matrix

这个就是题目给我们的待转置的数组

int* matrix[2]

int main()
{
	int a[3] = { 1,2,3 };
	int b[3] = { 4,5,6 };
	int* matrix[2] = { a,b };

}

这个比较简单大家也都能理解故我们直接下一个。

int matrixSize

特别注意很多同学(还有我,吐了🤮)可能会因为它的英文而想当然,以为它是整个数组的元素个数,其实它是数组的行数!!!,至于为什么人家就是这么设定的

int* matrixColSize

这个就和它的英文名一样,指的是题目给定数组的列数,不过使用指针来传递的,用的时候记得解引用。

int* returnSize

因为前面有个return所以不难想到,它是要我们返回的(也就是我们求的),后面的Size和前面的matrixSize大同小异,都不是指总元素个数而是行数

int** returnColumnSizes

压轴出场是有道理的,相信许多朋友距离AC都倒在这里了吧(心碎💔),本蒟蒻在这里被恶心了一个晚上,这也就是我为什么要写这篇文章的原因,就是不希望大家在这里浪费时间。

解释如下:我们可以看到它是双重指针,后面有个return和ColumnSizes,不知道大家看到这个会想到什么,我第一时间想到的是,开辟(一定记住返回不论是指针还是双重指针一定要用malloc开创,这也是力扣的一个特点,不用free力扣默认给你free了不用担心)数组图如下

然后每个数组的首个元素存放行数再返回,但是很可惜,这样是错误的❌的,希望大家不要理解成这样。

正确的思想是:

我先给出正确的代码大家先看看(下面有解释)

c就是列的意思,r就是行的意思。

我们可以清楚的看到,returnColumnSizes里面只存储了一个指针(可以理解成数组,这里的功能差不多),那个指针里面放了个个行的列数。

下面我给出模仿题目的main()函数,大家看看(非常细节)

模仿main()函数

解释都在代码里面了,故我就不在多说啦。

int main()
{
    int** transpose(int** matrix, int matrixSize, int* matrixColSize, int* returnSize, int** returnColumnSizes);
    int matrix0[3] = { 1, 2, 3 };           // 矩阵第1行元素 
    int matrix1[3] = { 4, 5, 6 };          //矩阵第2行元素   
    int* matrix[2] = { matrix0, matrix1 };  // 指针数组, 此处不能直接定义matrix[2][3]作为入参
    int matrixSize = 2;                   //对应行数m      
    int matrixColSize[2] = { 3, 3 };        // 每一行元素个数n 
    int returnSize = 0;                   // 返回矩阵的行数                        
    int* returnColumnSizes = NULL;        // 返回矩阵每一行的列数, 是个数组(指针表示) 
    int** ans = transpose(matrix, matrixSize, matrixColSize, &returnSize, &returnColumnSizes);    // 注意这里要用取地址                            
    // 如果要改变一个变量的值, 就需要传入该变量的指针 
    // ans最终返回为n * m的矩阵 
    for (int i = 0; i < returnSize; i++)
    {
        for (int j = 0; j < matrixSize; j++)
        {
            printf("%d ", ans[i][j]);
        }
        printf("\n");

    }
    return 0;
}

接下来是总代码目标数组我就设为两行三列的数组。

完整代码

数组大家可以自己调整

#define  _CRT_SECURE_NO_WARNINGS 1
#include <stdbool.h>
#include <stdio.h>
#include <string.h> 
#include <stdlib.h>
int main()
{
    int** transpose(int** matrix, int matrixSize, int* matrixColSize, int* returnSize, int** returnColumnSizes);
    int matrix0[3] = { 1, 2, 3 };           // 矩阵第1行元素 
    int matrix1[3] = { 4, 5, 6 };          //矩阵第2行元素   
    int* matrix[2] = { matrix0, matrix1 };  // 指针数组, 此处不能直接定义matrix[2][3]作为入参
    int matrixSize = 2;                   //对应行数m      
    int matrixColSize[2] = { 3, 3 };        // 每一行元素个数n 
    int returnSize = 0;                   // 返回矩阵的行数                        
    int* returnColumnSizes = NULL;        // 返回矩阵每一行的列数, 是个数组(指针表示) 
    int** ans = transpose(matrix, matrixSize, matrixColSize, &returnSize, &returnColumnSizes);    // 注意这里要用取地址                            
    // 如果要改变一个变量的值, 就需要传入该变量的指针 
    // ans最终返回为n * m的矩阵 
    for (int i = 0; i < returnSize; i++)
    {
        for (int j = 0; j < matrixSize; j++)
        {
            printf("%d ", ans[i][j]);
        }
        printf("\n");

    }
    return 0;
}
int** transpose(int** matrix, int matrixSize, int* matrixColSize, int* returnSize, int** returnColumnSizes) 
{
    int r = matrixSize;//行m
    int c = *matrixColSize;//列n
    int** transmatrix = (int**)malloc(sizeof(int*) * c);
    *returnColumnSizes = (int*)malloc(sizeof(int) * c);
    for (int i = 0; i < c; i++)
    {
        transmatrix[i] = (int*)malloc(sizeof(int) * r);
        (*returnColumnSizes)[i] = r;
    }
    for (int i = 0; i < r; i++)
    {
        for (int j = 0; j < c; j++)
        {
            transmatrix[j][i] = matrix[i][j];
        }
    }
    *returnSize = c;
    return transmatrix;
}

运行结果

最后本题的AC答案

/**
 * Return an array of arrays of size *returnSize.
 * The sizes of the arrays are returned as *returnColumnSizes array.
 * Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().
 */
int** transpose(int** matrix, int matrixSize, int* matrixColSize, int* returnSize, int** returnColumnSizes) {
    int r = matrixSize;//行m
    int c = *matrixColSize;//列n
    int**transmatrix = (int**)malloc(sizeof(int*)*c);
    *returnColumnSizes = (int*)malloc(sizeof(int)*c);
    for(int i =0;i<c;i++)
    {
        transmatrix[i] = (int*)malloc(sizeof(int)*r);
        (*returnColumnSizes)[i] = r; 
    } 
    for(int i =0;i<r;i++)
    {
        for(int j =0;j<c;j++)
        {
            transmatrix[j][i] = matrix[i][j];
        }
    }
    *returnSize = c;
    return transmatrix;
}

由于本题简单,加上本文重点并不在将解决本题,如果有朋友对本题还有疑惑的话可以去看看官方题解(非常抱歉)

结语:

其实写博客不仅仅是为了教大家,同时这也有利于我巩固自己的知识点,和一个学习的总结,由于作者水平有限,对文章有任何问题的还请指出,接受大家的批评,让我改进,如果大家有所收获的话还请不要吝啬你们的点赞和收藏,这可以激励我写出更加优秀的文章。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

了解数据链路层中的HDLC协议

HDLC&#xff08;High-Level Data Link Control&#xff09;协议是一种数据链路层协议&#xff0c;它定义了在数字通信中数据的传输和控制方式。HDLC协议具有简单高效、可靠可扩展等特点&#xff0c;在广域网和局域网中得到了广泛应用。本文将介绍HDLC协议的基本概念、工作原理…

OpenAI大反击!称纽约时报涉嫌故意操纵,且数据是「合理使用」

大家好我是二狗。 《纽约时报》向法院起诉OpenAI侵犯版权后续事件来了&#xff01; 就在今天&#xff0c;OpenAI进行了一场“危机公关”&#xff1a;直接在官方博客上撰文发声&#xff0c;反驳《纽约时报》的诉讼&#xff0c;其主要观点有四个&#xff1a; 1、我们正在和新闻…

低代码的应用场景

Gartner 在 2019 年的低代码调研报告中&#xff0c;曾经绘制过一张用来阐述低代码适用场景的“应用金字塔”&#xff0c;如下图所示&#xff1a; 应用级别划分&#xff1a;从下往上&#xff0c;分别为工作组级(Workgroup Class)、部门级(Departmental Class)、企业级(Enterpris…

SV-298XT IP网络广播板 SV-298XT-共公广播音频模块IP网络广播板

SV-298XT IP网络广播板 SV-298XT-共公广播音频模块IP网络广播板 SV-298XT网络广播模块是一款全数字网络型广播模组&#xff0c;核心部分采用了成熟的私有协议解决方案&#xff0c;性能稳定可靠。支持TCP、UDP、组播协议能针对当前服务器中不同的广播任务设置不同的广播传输方式…

mac 快捷键

mac 程序坞 ctrlaltD:打开程序坞 调度中心 Ctrl键↑: 调度中心 Ctrl键↓:应用程序窗口 F11 : 显示桌面 输入法 Ctrl键空格: 切换输入法 Ctrl键Alt(Option)空格: 切换输入法 截屏 帮助 Ctrl键shift键/: 显示帮助

24年教资报名千万不要卡在照片上,看看照片有啥要求?

每年都有很多人教资报名卡在照片上&#xff0c;总是审核不通过&#xff0c;24年教资报名千万不要卡在照片上&#xff0c;快来看看照片有啥要求吧&#xff1f;如果还没有准备&#xff0c;可以支付宝搜索【亿鸣证件照】或者微信搜索【随时照】小程序&#xff0c;然后进入小程序的…

uniapp微信小程序投票系统实战 (SpringBoot2+vue3.2+element plus ) -用户投票实现

锋哥原创的uniapp微信小程序投票系统实战&#xff1a; uniapp微信小程序投票系统实战课程 (SpringBoot2vue3.2element plus ) ( 火爆连载更新中... )_哔哩哔哩_bilibiliuniapp微信小程序投票系统实战课程 (SpringBoot2vue3.2element plus ) ( 火爆连载更新中... )共计21条视频…

Facebook算法背后的奥秘:个性化内容如何塑造你的新闻feed

Facebook&#xff0c;作为全球最大的社交媒体平台之一&#xff0c;其新闻feed承载着用户浏览内容的重要功能。然而&#xff0c;这一切并非偶然&#xff0c;背后隐藏着强大的算法系统。本文将深入探讨Facebook算法的奥秘&#xff0c;揭示个性化内容是如何在新闻feed中精准呈现的…

主播风格的多样性

主播风格是主播在直播过程中表现出来的一种个性特点&#xff0c;它可以影响观众的感知和互动体验。以下是常见的几种主播风格: 1.时尚型:这种风格的主播通常穿着时尚、前卫&#xff0c;以潮流、新颖的形象出现在观众面前&#xff0c;善于捕捉时尚元素&#xff0c;并能够将其融…

2023年快要结束了,今年哪些计算机书值得推荐?

2023年推荐新书有如下几本&#xff1a; 1、软件开发安全之道概念、设计与实施 软件安全设计和实施&#xff0c;覆盖安全概念、设计与实践&#xff0c;让您轻松应对各种威胁与挑战&#xff0c;帮助读者培养安全意识&#xff0c;全面了解软件开发安全之道。 2、C Templates&…

2023年全国职业院校技能大赛(高职组)“云计算应用”赛项赛卷⑩

2023年全国职业院校技能大赛&#xff08;高职组&#xff09; “云计算应用”赛项赛卷10 目录 需要竞赛软件包环境以及备赛资源可私信博主&#xff01;&#xff01;&#xff01; 2023年全国职业院校技能大赛&#xff08;高职组&#xff09; “云计算应用”赛项赛卷10 模块…

力扣刷题--设计链表707

这个题目的难点&#xff1a; 确定index是什么&#xff0c;index的范围向后遍历的次数&#xff0c;也就是循环的次数在某处添加或者删除一个结点&#xff0c;需要找到它的前一个结点 单链表 首先对于创建一个链表&#xff0c;需要单链表结构 public class ListNode {int val;…

手持终端PDA定制厂家_5G安卓手持机设备/条形码扫描手持机PDA

手持终端PDA是一种功能强大的手持终端设备&#xff0c;具备一维码和二维码扫描功能&#xff0c;广泛应用于门票管理、零售、智能巡检、仓储物资管理、金融、快递等领域。 这款手持终端基于MT6877方案&#xff0c;搭载八核处理器(2xCortex-A78 2.4GHz 6xCortex-A55 2.0GHz)&…

【金猿案例展】首创证券——NoETL敏捷分析解决方案

‍ Aloudata 本项目案例由 Aloudata 投递并参与“数据猿年度金猿策划活动——2023大数据产业年度创新服务企业榜单/奖项”评选。 大数据产业创新服务媒体 ——聚焦数据 改变商业 党的十八大以来&#xff0c;党中央、国务院不断加大金融科技创新支持力度&#xff0c;扩大金融科…

系统存储架构升级分享

一、业务背景 系统业务功能&#xff1a;系统内部进行数据处理及整合, 对外部系统提供结果数据的初始化(写)及查询数据结果服务。 系统网络架构: • 部署架构对切量上线的影响 - 内部管理系统上线对其他系统的读业务无影响 •分布式缓存可进行单独扩容, 与存储及查询功能升级…

中国智造闪耀CES | 木牛科技在美国CES展亮相多领域毫米波雷达尖端方案

素有全球科技潮流“风向标”之称的2024国际消费类电子产品展&#xff08;CES&#xff09;&#xff0c;于1月9-12日在美国拉斯维加斯会议中心举办。CES是全球最大的消费电子和消费技术展览会之一&#xff0c;汇集了世界各地优秀的消费电子和科技公司&#xff0c;带着最好的产品来…

深入理解C#中的引用类型、引用赋值以及 `ref` 关键字

深入理解C#中的引用类型、引用赋值以及 ref 关键字 在C#编程中&#xff0c;理解引用类型、引用赋值以及 ref 关键字的使用对于编写高效、可靠的代码至关重要。本文将深入探讨这些概念&#xff0c;帮助您更好地理解C#的工作原理。 引用类型简介 在C#中&#xff0c;所有的类型都…

机器学习笔记一之入门概念

目录 一 基本分类二 按模型分类概率模型&#xff08;Probabilistic Models&#xff09;非概率模型&#xff08;Non-Probabilistic Models&#xff09;对比结论线性模型 (Linear Models)非线性模型 (Non-linear Models)对比 三 按算法分类1.批量学习&#xff08;Batch Learning&…

centenos下载安装

阿里云镜像下载 centos-7-isos-x86_64安装包下载_开源镜像站-阿里云 新建虚拟机 (1) 创建新的虚拟机 可以在主页直接点击创建新的虚拟机也可以在上方&#xff0c;点击文件&#xff0c;新建虚拟机 (2) 选择自定义&#xff08;高级&#xff09; (3) 硬盘兼容性 默认即可。我…

php 函数声明与调用

在 PHP 中&#xff0c;函数声明和调用的语法如下&#xff1a; 函数声明的一般形式为&#xff1a; function functionName($param1, $param2, ...) {// 函数体return $result; // 可选 } 例如&#xff1a; function add($a, $b) {return $a $b; } 函数调用的一般形式为&am…