Day.2 LeetCode刷题练习(螺旋矩阵)

news2024/10/7 11:24:40

题目:

例子:

分析题目:

本题给了一个值n要生成一个n*n的矩形,并且是螺旋的生成值。

这样我们可以把它分层来看如n =4时生成一个4*4的矩形由两层矩形构成,这样就能先遍历生成最外面的一层后再去生成里面的一层

那如何实现遍历呢?

先一行行来看(一层的上下左右行),因为起始位置是 0 0 所以我们能用对一层中的每一行用左闭右开的形式生成,这样就能顺利的完成对一层的遍历(具体就是从开始位置开始生成,每行的最后一个位置就不动,作为下一行的开始

 

思想有了那就来实现:
附:

其中的returnSize、returnColumnSizes分别表示的是

returnSize:返回共有几行

returnColumnSizes:创建一个数组,数组中对应存放了每一行有几列

写法思路:

  1. 先要生成一个二维数组,来放螺旋矩形
  2. 通过遍历来生成(用一个变量来记录每一层的开始startx、starty , 如n == 4时 startx、y一开始为0 0 然后到里面那一层时开始为 1 1 )
  3. 然后是循环次数,那个实例来看 n == 4 时 循环两边即可,那就是n/2次
  4. 但注意的是,如n == 3 、 5 、 ...  这样的奇数时其中在循环遍历后会在最中间剩下一个位置而这个位置也是最后一个遍历的值,所以可以单独领出来判断一些即可

还有一些详细的过程已经进行了注释

int** generateMatrix(int n, int* returnSize, int** returnColumnSizes){
    int startx = 0,starty = 0,tag = 1,count = 1;//剪掉count让其形成左闭右开
    *returnSize = n;//返回有几行
    *returnColumnSizes = (int*)malloc(sizeof(int)*n);//返回每一行的列数
    
//创建一个二维数组
    int **arr =(int**)malloc(sizeof(int*)*n);//先开辟一个存放一级指针的数组
    for(int i = 0; i < n ;i++)
    {
        arr[i] = (int*)malloc(sizeof(int)*n);//给每一行开辟空间 ,这样就形成了二级指针
        (*returnColumnSizes)[i] = n;//每一行赋值有几列
    }
    int i = 0 , j = 0;
    int tmp = n/2;
    while(tmp--)//遍历n/2圈如:n == 4 时遍历2圈
    {

//对每一行进行左闭右开的遍历
//tag是用来形成右开的即n - tag 是最后一个位置处的下标

        for(;j <n - tag;j++)
            arr[i][j] = count++;
        for(; i <n - tag ; i++)
            arr[i][j] = count++;
        for(;j > startx; j--)
            arr[i][j] = count++;
        for(;i > starty; i--)
            arr[i][j] = count++;

//遍历完一层后需要改变一下开始startx、y 前置++一下赋值给i、j 
        i= ++starty;
        j= ++startx;
        tag++;//tag++一下因为此时的边界又往里面进了一位
    }

    if(n % 2 == 1)//当n是奇数时
        arr[n/2][n/2] = count;//对最中间没有遍历到的最后一个值就行赋值
    return arr;
}

总结:

  1. 找规律,找到一个不变量,才能进行遍历

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

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

相关文章

【VSCODE】4、vscode git pull/push 报错 remote: HTTP Basic: Access denied

一、报错示例 在执行 git pull/push 的时候报错如下 二、解决方式 该问题来自 vscode 的身份验证 打开 vscode →code → 首选项 → 设置搜索 git.terminalAuthentication取消选中该选项重启终端即可

2023黑马头条.微服务项目.跟学笔记(一)

前言 黑马头条一直是黑马培训班内部的项目&#xff0c;应该是今年推出了天机学堂的项目&#xff0c;所以这个头条微服务项目就被公布了&#xff0c;整体上看技术架构丰富&#xff0c;很适合微服务练手和补足。有些技术栈的版本可能是前几年的&#xff0c;不过这个不影响&#x…

医药销售数据分析

阅读原文 一、数据源 来自某医药公司的产品销售数据&#xff0c;时间为 3 月到 5 月&#xff0c;共 48 个 Excel 表格。包含订单信息、售后信息、用户信息以及对应销售人员信息等。 加载合并后得到的原始数据如下&#xff1a; 二、数据清洗 清洗流程以及对应细节 加载数据源 …

多表查询(JOIN)

数据准备 我们需要两个表 student 和 student_score CREATE TABLE student (student_id int NOT NULL,name varchar(45) NOT NULL,PRIMARY KEY (student_id) );CREATE TABLE student_score (student_id int NOT NULL,subject varchar(45) NOT NULL,score int NOT NULL ); 然后…

Linux中tail命令的使用

tail 命令可用于查看文件的内容&#xff0c;有一个常用的参数 -f 常用于查阅正在改变的日志文件。 tail -f filename 会把 filename 文件里的最尾部的内容显示在屏幕上&#xff0c;并且不断刷新&#xff0c;只要 filename 更新就可以看到最新的文件内容。 tail [参数] [文件] …

553、Vue 3 学习笔记 -【创建Vue 3.0工程(一)】 2023.06.30

目录 一、Vue 3 介绍1. Vue 3 官方文档2. Vue 3带来了什么1.1 性能的提升1.2 源码的升级1.3 拥抱TypeScript1.4 新的特性 二、创建Vue3.0工程1. 使用 vue-cli创建2. 使用vite创建3. 分析工程结构 三、参考链接 一、Vue 3 介绍 1. Vue 3 官方文档 Vue 3 官方的文档地址 2. Vu…

复杂onnx解决方案(以sparseconv为例)

目录 前言1. 稀疏卷积2. Sparse Convolution Model2.1 输入数据模型2.2 卷积核2.3 输出的定义2.4 计算流程2.4.1 构建 hash table2.4.2 构建 Rulebook2.4.3 在GPU上计算Pipeline 2.5 Summary 3. SCN导出3.1 实现trace3.2 导出onnx3.3 CenterPoint SCN导出3.4 执行图的构建3.5 o…

Swagger|SpringBoot集成Swagger用以生成API文档

框架简介 Swagger的作用&#xff1a; 自动生成强大的RESTful API文档&#xff0c;减少开发人员的工作量。使用Swagger&#xff0c;只需在代码中添加一些注解即可生成API接口文档&#xff0c;不需要手动编写API接口文档&#xff0c;这减少了开发人员的工作量。 提供API文档的同步…

西安石油大学 C++期末考试 重点知识点+题目复习(下)

析构函数调用顺序 析构函数的调用顺序与对象的创建和销毁顺序相反。 对于单个对象&#xff0c;当对象的生命周期结束时&#xff08;例如离开作用域&#xff09;&#xff0c;会调用其析构函数。因此&#xff0c;析构函数会在对象销毁之前被调用。 对于类的成员对象&#xff0…

软件工程期末复习-软件设计模式与体系结构-体系结构

目录 软件体系结构概述一、调用-返回风格软件体系结构概念主程序-子程序软件体系结构自顶向下的设计方法的问题结构化设计的优缺点面向对象体系结构面向对象设计的优缺点主程序-子程序与面向对象体系结构相似差异 课程作业 二、数据流风格软件体系结构概念控制流 vs. 数据流数据…

【第一章 flutter学习入门之环境配置】

flutter环境安装 文章目录 flutter环境安装前言一、环境变量配置二、下载Flutter SDK三.排除错误 安装依赖四. 设置Android模拟器五.安装插件VScode打开flutter项目 前言 本文是针对Windows系统环境配置flutter 需要git环境依赖&#xff0c;这里就不做过多赘述 一、环境变量配…

PFASs在固体-溶液体系中分配系数

一、对于PFASs在土壤-溶液体系中的吸附行为,可以用土壤-水分配系数(Kd,L/kg)来表征[1-3]。 Cs为沉积物(sediment)中PFAAs的浓度(ng/g dw);Cw为水(water)中单个PFAAs的浓度(μg/L)。 以往许多研究发现,Ksp与沉积物的有机碳组分有关,表明有机质含量是影响沉积物和孔…

【书】《Python全栈测试开发》——浅谈我所理解的『自动化』测试

目录 1. 自动化测试的What and Why?1.1 What1.2 Why2. 自动化的前戏需要准备哪些必备技能?3. 自动化测试类型3.1 Web自动化测试3.1.1 自动化测试设计模式3.1.2 自动化测试驱动方式3.1.3 自动化测试框架3.2 App自动化测试3.3 接口自动化测试4. 自动化调优《Python全栈测试开发…

PPO算法基本原理及流程图(KL penalty和Clip两种方法)

PPO算法基本原理 PPO&#xff08;Proximal Policy Optimization&#xff09;近端策略优化算法&#xff0c;是一种基于策略&#xff08;policy-based&#xff09;的强化学习算法&#xff0c;是一种off-policy算法。 详细的数学推导过程、为什么是off-policy算法、advantage函数…

47. Compose自定义绘制日历-1

有个日历的需求, 自己实现一下简单的 生成数据 private fun initData() {val listOfCalendar mutableListOf<CalendarData>()val calendar Calendar.getInstance()val todayYear calendar.get(Calendar.YEAR)val todayMonth calendar.get(Calendar.MONTH)val today…

单机和分布式有什么区别?分布式系统相比单机系统的优势在哪里?

写在前面 本文隶属于专栏《大数据理论体系》&#xff0c;该专栏为笔者原创&#xff0c;引用请注明来源&#xff0c;不足和错误之处请在评论区帮忙指出&#xff0c;谢谢&#xff01; 本专栏目录结构和文献引用请见《大数据理论体系》 思维导图 1. 资源共享 单机系统是指只有一…

springboot项目通过nginx访问ftp服务器文件

前文 本来准备记录一下。项目中遇到的springboot项目访问ftp服务器图片、视频问题的&#xff0c;想在我自己服务器上重新部署一遍&#xff0c;然后发现&#xff0c;执行docker的时候报错了。具体报错原因如下&#xff1a; 原因是我重启了一下服务器 Cannot connect to the Do…

ChatGPT实战:生成演讲稿

当众发言&#xff08;演讲&#xff09;是一种传达信息、观点和情感的重要方式。通过演讲&#xff0c;人们可以在公共场合表达自己的观点&#xff0c;向观众传递自己的知识和经验&#xff0c;激发听众的思考和行动。无论是商务演讲、学术讲座还是政治演说&#xff0c;演讲稿的写…

linux查找文件内容命令之grep -r ‘关键字‘

目录 grep命令介绍参数选项 grep命令的使用1. 在指定的文件中查找包含的关键字2. 在指定目录下多个文件内容中查找包含的关键字3.在追加的文件内容中查找关键字4. 统计文件中关键字出现的次数5. vi或vim打开的文件查找关键字(补充) 总结 grep命令介绍 Linux操作系统中 grep 命…

EventBus源码分析

差不多两年没写博客了&#xff0c;最近想着要找工作了&#xff0c;打算复习下一些常用的开源库&#xff0c;也是这篇博客的由来&#xff5e; EventBus使用非常简单 参考&#xff1a;github 再贴一张官网的图 一、示例代码 示例代码是为了便于理解后面注解处理器生成代码的处…