代码随想录算法训练营第二天|【数组】59.螺旋矩阵II

这两天工作的事情有点多,周末又比较懒,所以没有跟上进度。这两天开始补进度。

题目

给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。
在这里插入图片描述

示例 1:

输入:n = 3
输出:[[1,2,3],[8,9,4],[7,6,5]]
示例 2:

输入:n = 1
输出:[[1]]

提示:

1 <= n <= 20

思路

面试中出现频率较高的题目
本题并不涉及到什么算法,就是模拟过程,但却十分考察对代码的掌控能力。

要如何画出这个螺旋排列的正方形矩阵呢?

  • 坚持循环不变量原则

  • 模拟顺时针画矩阵的过程:

    • 填充上行从左到右
    • 填充右列从上到下
    • 填充下行从右到左
    • 填充左列从下到上

这里一圈下来,我们要画每四条边,这四条边怎么画,每画一条边都要坚持一致的左闭右开,或者左开右闭的原则,这样这一圈才能按照统一的规则画下来。

在这里插入图片描述

这里每一种颜色,代表一条边,我们遍历的长度,可以看出每一个拐角处的处理规则,拐角处让给新的一条边来继续画。

这也是坚持了每条边左闭右开的原则。

while循环里判断的情况是很多的,代码里处理的原则也是统一的左闭右开。

class Solution {
    public int[][] generateMatrix(int n) {
        int loop = 0;//控制循环的次数 同时也是控制边界的变量,每次循环右边界收缩一位 这里用循环次数代替了边界收缩的大小
        int[][] res = new int[n][n];//二维数组
        int startx = 0, starty = 0;//每次循环的起点 (start,start)
        int count = 1;//给每个空格填充数字,1-n的平方
        int mid = n/2;//矩阵的中间位置,矩阵中间的位置,例如:n为3, 中间的位置就是(1,1),n为5,中间位置为(2, 2)
        int i, j;

        while (loop++ <= n/2) {
            //loop从第一圈,即第一次循环开始  <=n/2

			// 下面开始的四个for就是模拟转了一圈
            //模拟上侧从左到右
            for (j = starty; j < n - loop; j++) {
                res[startx][j] = count++;//赋值后 +1
            }
            //模拟右侧从上到下
            for (i = startx; i < n - loop; i++) {
                res[i][j] = count++;//这里的i是递增的,而j是不变的!
            }
            //模拟下侧从右到左
            for (;j > starty; j--) {
                res[i][j] = count++;
            }
            //模拟左侧从下到上
            for (;i > startx; i--) {
                res[i][j] = count++;
            }

            //起始位置+1 第二圈开始的时候,起始位置要各自加1, 例如:第一圈起始位置是(0, 0),第二圈起始位置是(1, 1)
            startx++;
            starty++;            
        }

        //如果单数的n,要另外给中间补上值
        if (n % 2 == 1) {
            res[mid][mid] = count;//此时count已经+了1了,从while循环跳出来的
        }
        return res;

    }
}

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

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

相关文章

Java代码实现elasticSearch的DSL复合查询

elasticsearch提供DSL&#xff08;domain specific language&#xff09;查询&#xff0c;就是以json格式定义查询条件实现复杂条件查询。 DSL查询分为俩大类&#xff1a; 叶子查询&#xff1a;一般是在特定的字段里查询特定值&#xff0c;属于简单查询&#xff0c;很少单独使…

峟思雨水情智能监测与预警系统核心运作机制解析

雨水情智能监测与预警系统&#xff0c;作为现代水文观测领域的尖端技术集成体&#xff0c;其运作机制深度融合了信息采集的精准性、数据传输的高效性、数据分析的智能化以及预警响应的及时性&#xff0c;构建了全方位、多层次的水文安全防线。以下是对该系统核心运作机制的深入…

C++的入门基础

目录 C的简单介绍命名空间命名空间的使用C的输入与输出缺省参数函数重载 C的简单介绍 本贾尼斯特劳斯特卢普博士在C的基础上增加了面向对象的特性&#xff0c;这时又增加了继承和、类、封装的概念&#xff0c;为后来的面向对象的编程奠定了基础&#xff0c;这被命名为C 命名空…

进度条提示-在python程序中使用避免我误以为挂掉了

使用库tqdm 你还可以手写一点&#xff0c;反正只要是输出点什么东西都可以&#xff1b; Demo from chatgpt import time from tqdm import tqdm# 示例函数&#xff0c;模拟长时间运行的任务 def long_running_task():total_steps 100for step in tqdm(range(total_steps), …

用python生成词频云图(python实例二十一)

目录 1.认识Python 2.环境与工具 2.1 python环境 2.2 Visual Studio Code编译 3.词频云图 3.1 代码构思 3.2 代码实例 3.3 运行结果 4.总结 1.认识Python Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。 Python 的设计具有很强的可读性&a…

unity-记录位置的坐标系

目录 确定世界坐标系原点的方法 1.创建一个物体 2.在检查器中&#xff0c;将该物体的位置设置为0&#xff0c;0&#xff0c;0 3.观察 父子物体的位置关系 调整坐标轴位置 坐标轴的局部与全局旋转 全局 ​局部 unity使用的是左手坐标系 世界坐标系&#xff1a;是整个游…

从数字化营销与运营视角:看流量效果的数据分析

基于数据打通的“全链路”营销是当下的“时髦”&#xff0c;应用它的前提是什么&#xff1f;深度营销和运营的关键数据如何获得&#xff1f;如何利用数据进行更精准的营销投放&#xff1f;如何利用数据优化投放的效果&#xff1f;如何促进消费者的转化&#xff0c;以及激活留存…

Java语言程序设计——篇二(2)

Java语言基础 运算符与表达式运算符1、算术运算符2、关系运算符3、逻辑运算符&#xff08; &&、||、 !、&、| 、^&#xff09;4、位运算符&#xff08; >>、<<、>>>、&、|、^、~&#xff09;5、赋值运算符6、条件运算符7、字符串运算符8、…

我们公司落地大模型的路径、方法和坑

最近一年&#xff0c;LLM&#xff08;大型语言模型&#xff09;已经成熟到可以投入实际应用中了。预计到 2025 年&#xff0c;AI 领域的投资会飙升到 2000 亿美元。现在&#xff0c;不只是机器学习专家&#xff0c;任何人都能轻松地把 AI 技术融入自己的产品里。 我们整理了一…

AI与智能的差异

在讨论AI&#xff08;人工智能&#xff09;与智能的差异时&#xff0c;可以从以下几个角度来理解&#xff1a; 人工智能&#xff08;AI&#xff09;是指计算机系统执行人类通常需要使用智力才能完成的任务的能力。这包括感知、推理、学习、解决问题等。AI可以通过算法和大数据进…

【C++】开源:格式化库fmt配置与使用

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍格式化库fmt配置与使用。 无专精则不能成&#xff0c;无涉猎则不能通。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&#xff0c;下…

Aop切面编程(1)

1、aop的使用思想&#xff1a;面向切面的编程&#xff0c;不改变原有代码的基础上&#xff0c;进行拓展&#xff0c;减少代码的冗余&#xff0c;降低耦合性&#xff1b; 2、使用注解进行aop编程&#xff0c;使用自定义注解 2.1导入aop的依赖 <dependency><groupId&…

人话学Python-基础篇-数字计算

一&#xff1a;数字类型 对于最常见的数据类型,数字在Python中分为三类&#xff1a; 整型(int) 表示的是整数类型的所有数字&#xff0c;包括正整数&#xff0c;负整数和0。和C语言不同的是&#xff0c;Python中的int型没有范围的限制&#xff0c;理论上可以从无限小的整数取到…

文献阅读:基于测序的空间转录组方法的系统比较

文献介绍 文献题目&#xff1a; Systematic comparison of sequencing-based spatial transcriptomic methods 研究团队&#xff1a; 田鲁亦&#xff08;广州实验室&#xff09;、刘晓东&#xff08;西湖大学&#xff09; 发表时间&#xff1a; 2024-07-04 发表期刊&#xff…

【YOLO格式的数据标签,目标检测】

标签为 YOLO 格式&#xff0c;每幅图像一个 *.txt 文件&#xff08;如果图像中没有对象&#xff0c;则不需要 *.txt 文件&#xff09;。*.txt 文件规格如下: 每个对象一行 每一行都是 class x_center y_center width height 格式。 边框坐标必须是 归一化的 xywh 格式&#x…

上传图片,base64改为文件流,并转给后端

需求&#xff1a; html代码&#xff1a; <el-dialog v-model"dialogPicVisible" title"新增图片" width"500"><el-form :model"picForm"><el-form-item label"图片名称&#xff1a;" :label-width"10…

开放式耳机哪个品牌比较好?2024最值得推荐的火爆机型!!

在这个快节奏的时代&#xff0c;我们都在寻找那些既能让我们享受音乐&#xff0c;又能保持对外界感知的音频设备。开放式耳机以其独特的设计&#xff0c;满足了这一需求&#xff0c;它们让你在享受音乐的同时&#xff0c;还能听到周围环境的声音&#xff0c;无论是安全出行还是…

【机器学习】作业 Exam1

线性回归预测 唉&#xff0c;研0了&#xff0c;得学机器学习了。当然还是听的吴恩达老师的课&#xff0c;虽然全是英文&#xff0c;但是&#xff0c;怎么评价呢&#xff0c;讲得既专业又通俗易懂&#xff0c;初学者(像我这样的菜鸡)都值得一看&#xff01;&#xff01; 根据人…

更深入了解汽车与航空电子等安全关键型应用的IP核考量因素

作者&#xff1a;Philipp Jacobsohn&#xff0c;SmartDV高级应用工程师 中国已经连续十多年成为全球第一大汽车产销国&#xff0c;智能化也成为了汽车行业发展的一个重要方向&#xff0c;同时越来越多的制造商正在考虑进入无人机和飞行汽车等低空设备&#xff0c;而所有的这些…

以太网电路相关功能说明

RJ45模块用于PHY芯片之间的互连&#xff0c;如图1所示&#xff0c;RJ45有两种组合形式&#xff0c;一种是分立式&#xff0c;网口变压器和RJ45连接座是分开的&#xff0c;另一种是网口变压器和RJ45集成在一起。 图1 RJ45两种主要形式 接下来以分立式RJ45的百兆网电路做个说明&a…