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

题目:

例子:

分析题目:

本题给了一个值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.hqwc.cn/news/3550.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python小游戏——骰子猜大小

❄️作者介绍&#xff1a;奇妙的大歪❄️ &#x1f380;个人名言&#xff1a;但行前路&#xff0c;不负韶华&#xff01;&#x1f380; &#x1f43d;个人简介&#xff1a;云计算网络运维专业人员&#x1f43d; 前言 我们已经基本学完了&#xff0c;逻辑判断和循环的用法&#…

华为OD机试真题 Python 实现【机房布局】【2023Q1 200分】,附详细解题思路

目录 一、题目描述二、输入描述三、输出描述四、补充说明五、解题思路六、Python算法源码七、效果展示1、输入2、输出 一、题目描述 小明正在规划一个大型数据中心机房&#xff0c;为了使得机柜上的机器都能正常满负荷工作&#xff0c;需要确保在每个机柜边上至少要有一个电箱…

市场营销书籍推荐,这些书帮你学好营销

市场营销一直是商业运作中的重要环节&#xff0c;因此市场营销的知识一直备受关注。在这篇文章中&#xff0c;小编将向你推荐三本经典市场营销书籍&#xff0c;通过阅读这些书籍能让你更深入了解市场营销的基本概念和策略。 1、《经理人参阅&#xff1a;市场营销》 《经理人参…

技术管理第三板斧招聘与解聘-找到人

1.人才要自己去找、去抢 从团队的角度出发&#xff0c;Leader“主动出击、寻找合适人选”的观念符合逻辑&#xff0c;你既然是团队的一号位&#xff0c;自然最应该了解团队现状&#xff0c;以及团队需要的人选。与此同时&#xff0c;找到合适的人对你的影响最大而非 HR&#x…

【MySQL数据库】MHA高可用配置及故障切换

目录 一、MHA简介1.1什么是MHA1.2MHA的组成1.3MHA的特点 二、搭建MHA2.1故障模拟2.2故障修复 一、MHA简介 1.1什么是MHA MHA&#xff08;MasterHigh Availability&#xff09;是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。MHA 的出现就是解决MySQL 单点的问题。M…

【HTTPS】采用的加密策略, 什么是中间人攻击? 什么是证书?

文章目录 前言一、认识 HTTPS 协议1, 对称加密2, 非对称加密 二、HTTPS 加密策略1, 只采用对称加密 : 不安全2, 引入非对称加密3, 中间人攻击之偷梁换柱4, 引入证书4.1 什么是证书4.2, 证书如何能解决"中间人攻击" 总结 前言 各位读者好, 我是小陈, 这是我的个人主页…

文件打包解包的方法

文件打包 前言 在很多情况下&#xff0c;软件需要隐藏一些图片&#xff0c;防止用户对其更改&#xff0c;替换。例如腾讯QQ里面的资源图片&#xff0c;哪怕你用Everything去搜索也搜索不到&#xff0c;那是因为腾讯QQ对这些资源图片进行了打包&#xff0c;当软件运行的时候解…

动态地图开发的未来应用场景有哪些?

动态地图开发应用已经成为现代数字世界中不可或缺的一部分。这种技术的灵活性为公司和组织提供了一种简单却强大的方式&#xff0c;以在现实世界地图上显示各种信息。无论是用于自动导航系统、气象预报、实时交通状况或利用商业洞察力获取市场数据&#xff0c;动态地图开发应用…

SpringBoot整合网易邮箱

SpringBoot整合邮箱 1&#xff0c;开启POP3/SMTP/IMAP服务 注意&#xff1a;每个邮箱的密码唯一&#xff0c;不要随意分享给他人 最后就是这个样子了 2&#xff0c;整合测试 2.1&#xff0c;pom.xml <?xml version"1.0" encoding"UTF-8"?> <…

【教程】解决php微擎中的goto加密解密,一键解密工具

今天&#xff0c;我将向大家揭秘一款神奇的工具——goto解密工具&#xff0c;轻松解密这个看似棘手的问题。 无数开发者都曾因为php中的goto功能而头疼不已。goto解密工具其中之一就是解密goto代码。通过精妙的算法和强大的解析能力&#xff0c;它能够解密被goto加密的代码段&…

Tune-A-Video:用于文本到视频生成的图像扩散模型的One-shot Tuning

Tune-A-Video: One-Shot Tuning of Image Diffusion Models for Text-to-Video Generation Project&#xff1a;https://tuneavideo.github.io 原文链接&#xff1a;Tnue-A-Video:用于文本到视频生成的图像扩散模型的One-shot Tuning &#xff08;by 小样本视觉与智能前沿&…

Redis基础认识

日升时奋斗&#xff0c;日落时自省 目录 1、Redis安装及配置 2、缓存简介 2.1、缓存优点 2.2、缓存分类 2.3、常见缓存使用 2.3.1、Spring Cache 2.3.2、Redis 3、Redis数据类型和使用 3.1、字符串类型 3.2、哈希类型 3.3、列表类型 3.4、集合类型 3.5、有序集合类…