LeetCode 59.螺旋矩阵II


LeetCode 59.螺旋矩阵II

1、题目

力扣题目链接:59. 螺旋矩阵 II - 力扣(LeetCode)

给你一个正整数 n ,生成一个包含 1n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix

示例 1:

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

示例 2:

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

提示:

  • 1 <= n <= 20

2、模拟

思路

这道题的目的是生成一个按照螺旋顺序填充的二维矩阵。给定一个整数n,它创建一个 n x n 的矩阵,并从左上角开始,按照顺时针方向螺旋填充数字,从1开始,直到填充完整个矩阵(n^2)。
我们可以通过模拟法来顺时针画出螺旋矩阵:

  • 填充上边界:从左到右
  • 填充右边界:从上到下
  • 填充下边界:从右到左
  • 填充左边界:从下到上

由外而内填充矩阵。
在这里要注意边界条件,否则很容易蒙圈。
每一圈,我们都要画四条边,每条边都要坚持一致的左闭右开,或者左开右闭的原则,这样这一圈才能按照统一的规则画下来。
下面按照左闭右开的原则,来画一圈,大家看一下:
image.png
这里每一种颜色,都代表一条边,可以看出每一个拐角处的处理规则,拐角处让给新的一条边来继续画。这也是坚持了每条边左闭右开的原则。

代码

class Solution {
public:vector<vector<int>> generateMatrix(int n) {// 初始化一个n x n的二维数组,所有元素初始化为0vector<vector<int>> res(n, vector<int>(n, 0));// 定义螺旋矩阵的起始位置 (startx, starty),也可以理解为横纵坐标int startx = 0, starty = 0;// 循环的次数,n 为奇数时,中间会有一个单独的元素需要单独处理,所以除以2int loop = n / 2;// n为奇数时,中间元素的坐标,例如:n为3, 中间的位置就是(1,1)int mid = n / 2; // 定义当前填充的数字,从 1 开始int count = 1; // 定义每次圈数增加时的偏移量,每次循环右边界收缩一位int offset = 1;int i,j;// 开始螺旋填充,每填充完一圈,loop 减 1while (loop --) {// 当前圈的起始横坐标和纵坐标i = startx;j = starty;// 下面开始的四个for就是模拟转了一圈// 从左到右填充上边界(左闭右开)for (j = starty; j < n - offset; j++) {res[startx][j] = count++;}// 从上到下填充右边界(左闭右开)for (i = startx; i < n - offset; i++) {res[i][j] = count++;}// 从右到左填充下边界(左闭右开)for (; j > starty; j--) {res[i][j] = count++;}// 从下到上填充左边界(左闭右开)for (; i > startx; i--) {res[i][j] = count++;}// 更新下一圈的起始位置,例如:第一圈起始位置是(0, 0),第二圈起始位置是(1, 1)startx++;starty++;// offset 控制每一圈里每一条边遍历的长度offset += 1;}// 如果 n 是奇数,则填充中心位置if (n % 2) {res[mid][mid] = count;}// 返回填充好的螺旋矩阵return res;}
};

复杂度分析

  • 时间复杂度 O(n^2): 模拟遍历二维矩阵的时间
  • 空间复杂度 O(1)

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

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

相关文章

你想来微软苏黎世混合现实研究中心学习和实习吗?

Microsoft Mixed Reality & AI Lab - Zurich 苏黎世混合现实研发中心简介 微软苏黎世混合现实与人工智能实验室概况 专注于利用计算机视觉绘制和理解环境&#xff0c;识别和跟踪相关物体&#xff0c;并帮助用户执行任务&#xff0c;构建混合现实的未来。该实验室还在探索混…

API接口淘宝开放平台item_get-获得淘宝商品详情API接口根据商品ID查询商品标题价格描述等详情数据

要使用淘宝开放平台的item_get API接口根据商品ID查询商品标题、价格、描述等详情数据&#xff0c;你需要先注册一个KEY账号&#xff0c;然后获取到api_key和api_secret。接下来&#xff0c;你可以使用Python的requests库来调用API接口。 以下是一个示例代码&#xff1a; # c…

网络管理实验二、SNMP服务与常用的网管命令

1 常用的网管命令 1.1 网络状态监视命令 包括以下命令&#xff1a;Ipconfig、ping、nslookup、dig、host ipconfig 作用&#xff1a;用来显示本机所有网卡的基本信息&#xff08;IP、掩码、网关、工作状态&#xff09;&#xff1b;用法&#xff1a;ipconfig展示&#xff1a;…

ExtendSim花生酱加工厂模型

该模型展示了ExtendSim可靠性模块与ExtendeSim离散速率技术相结合的协同作用。 在花生酱加工厂的最初阶段&#xff0c;花生经过烘烤和冷却。冷却后的花生经过热烫或水烫去外皮。这些经过漂白的花生进入过程的混合部分&#xff0c;在研磨机中用盐、葡萄糖和氢化油稳定剂将其粉碎…

如何通过Linux pciehp sysfs接口控制PCIe Slot电源状态?-3

pciehp sysfs接口电源控制与NVME驱动卸载的区别 从NVMe SSD设计本身而言&#xff0c;当通过pciehp sysfs接口对PCIe插槽执行Power Off操作时&#xff0c;由于NVMe SSD作为PCIe设备&#xff0c;其电源供应是直接依赖于所连接的PCIe插槽提供的。当插槽电源被关闭时&#xff0c;会…

死锁检测组件

一、死锁 线程 A 占用资源 1,线程 B 占用资源 2,线程 A 想占用资源 2,线程 B 想占用资源 1,线程 A 占用资源 1 的情况下去申请占用资源 2,线程 B 占用资源 2 的情况下去申请占用资源 1,就会出现互相等待对方释放资源的情况,也就是死锁。 CPU 占用率 100% → 出现死循环或…

国产HMI芯片Model3C ——工业品质价格亲民

工业级芯片相较于消费级芯片&#xff0c;在性能上确实拥有显著的优势&#xff0c;尤其对于带彩屏显示或HMI的产品来说&#xff0c;这种优势表现得尤为突出。 首先&#xff0c;对于带彩屏显示或HMI人机交互的产品来说&#xff0c;高性能的芯片是保证流畅的用户体验和快速响应的…

Spring中的适配器模式

在Spring MVC框架中&#xff0c;适配器模式主要体现在对不同类型的处理器&#xff08;即Controller&#xff09;的统一处理上。Spring MVC通过适配器模式来保证无论Controller的实现方式如何多样化&#xff0c;都能够被DispatcherServlet统一调用和管理。具体使用方式如下&…

如何AI绘画(动漫风格)

绘画描述&#xff1a;一只金毛犬 绘画结果&#xff1a; 如何AI绘画&#xff08;动漫风格&#xff09;&#xff1a; 关注一休哥助手微信公众号 点击小程序按钮打开一休哥助手小程序 切换到我&#xff0c;复制授权码 登录网站&#xff1a;https://www.fudai.fun/drawing&…

leetcode.45题:跳跃游戏II

Leetcode.45题&#xff1a;跳跃游戏II /* 题意的理解&#xff1a; nums[0] 只能跳 1 ~ nums[0]步 依次类推&#xff1a;从nums[0] - nums[n - 1] 最少需要多少步数 nums 2 3 1 1 4 nums[0] 2,初始只能跳 1/2步&#xff0c;如跳1步&#xff0c;达到nums[1] 而nums[1] 3,顾第二…

网络篇01 | 入门篇

网络篇01 | 入门篇 01 各层协议目录[网络篇02 | 应用层 kcp&#xff08;王者荣耀&#xff09;](https://blog.csdn.net/qiushily2030/article/details/135835946)[网络篇03 | 应用层 quic](https://blog.csdn.net/qiushily2030/article/details/136192481)[网络篇04 | 应用层 m…

Stable Diffusion之文生图模型训练

1、数据准备 提前准备好一组相关的照片。 在线的图片处理网站 BIRME - Bulk Image Resizing Made Easy 2.0 (Online & Free) 将图片转成统一大小&#xff0c;支持批量处理&#xff0c;效率高 2、生成提示词 进入stable diffusion webui页面 旧版直接使用 train/proproc…

医院一站式后勤管理系统 processApkUpload.upload 任意文件上传漏洞复现

0x01 产品简介 医院一站式后勤管理系统由南京博纳睿通软件科技有限公司开发的一款基于现代医院后勤管理理念的业务系统,产品结合后勤业务管理特点,通过管理平台将后勤管理业务予以系统化、规范化和流程化,从而形成一套构建于平台之上且成熟完善的后勤管理体系,并可在此体系…

使用阿里云试用Elasticsearch学习:Search Labs Tutorials 搭建一个flask搜索应用

文档&#xff1a;https://www.elastic.co/search-labs/tutorials/search-tutorial https://github.com/elastic/elasticsearch-labs/tree/main/example-apps/search-tutorial Full-Text Search

Excel报表成果展示

采用Excel函数实现数据的快速计算&#xff0c;如下&#xff0c;看似很复杂&#xff0c;实际非常方便。

文献速递:深度学习肝脏肿瘤诊断---基于深度学习的肝细胞结节性病变在整片组织病理图像上的分类

Title 题目 Deep Learning-Based Classification of Hepatocellular Nodular Lesions on Whole-Slide Histopathologic Images 基于深度学习的肝细胞结节性病变在整片组织病理图像上的分类 Background 背景 Hepatocellular nodular lesions (HNLs) constitute a heterogen…

面试八股——JVM★

类加载 类加载器的定义 类加载器的类别 类装载的执行过程 类的装载过程&#xff1a; 加载&#xff1a; 验证&#xff1a; 准备&#xff1a; 这里设置初始值并不是传统意义的设置初始值&#xff08;那个过程在初始化阶段&#xff09;。 解析&#xff1a; 初始化&#xff1a; …

李廉洋;4.12现货黄金,美原油最新走势分析及策略。

现货黄金在美盘末将历史新高刷至2377美元/盎司。美国3月份PPI指数较上年同期上升2.1%&#xff0c;为11个月来的最高增幅&#xff0c;这份数据加之此前火爆的CPI指数&#xff0c;为美联储实现2%目标所面临的坎坷之路奠定了基础。不过&#xff0c;PPI报告中的细节让担心通胀再度加…

全面支持工业协议钡铼IOy系列模块无缝融入PLC及工业物联网架构

钡铼IOy系列模块作为工业控制领域的创新产品&#xff0c;以其卓越的性能和广泛的适用性&#xff0c;无缝融入PLC&#xff08;可编程逻辑控制器&#xff09;及工业物联网架构&#xff0c;为工业自动化领域带来了全新的可能性。下面我们将详细探讨钡铼IOy系列模块与PLC及工业物联…

图像分割:Pytorch实现UNet++进行医学细胞分割

图像分割&#xff1a;Pytorch实现UNet进行医学细胞分割 前言相关介绍项目结构具体步骤准备数据集读取数据集设置并解析相关参数定义网络模型定义损失函数定义优化器训练验证 参考 前言 由于本人水平有限&#xff0c;难免出现错漏&#xff0c;敬请批评改正。更多精彩内容&#x…