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.hqwc.cn/news/619437.html

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

相关文章

2024mathorcup数学建模A 题思路分析-移动通信网络中 PCI 规划问题

# 1 赛题 A 题 移动通信网络中 PCI 规划问题 物理小区识别码(PCI)规划是移动通信网络中下行链路层上&#xff0c;对各覆盖 小区编号进行合理配置&#xff0c;以避免 PCI 冲突、 PCI 混淆以及 PCI 模 3 干扰等 现象。 PCI 规划对于减少物理层的小区间互相干扰(ICI)&#xff0c;增…

Jmeter八大元件

Jmeter八大元件 一、定义二、Jmeter八大元件的作用域三、 Jmeter的执行顺序 一、定义 取样器&#xff1a;jmeter接口测试的核心&#xff0c;我们发送接口请求的配置都必须在取样器中完成。 逻辑控制器&#xff1a;可以控制Jmeter其他元件的运行方式。主要有循环、IF条件等功能…

k8s安装流程

文章目录 整体概述一、准备工作1.linux等软件安装2.环境准备 二、安装docker-ce 18.09.9&#xff08;所有机器&#xff09;三、设置k8s环境准备条件&#xff08;所有机器&#xff09;四、安装k8s v1.16.0 master管理节点五、安装k8s v1.16.0 node工作节点六、安装flannel&#…

JetBrains DataGrip 2024.1 发布 - 数据库和 SQL 跨平台 IDE

JetBrains DataGrip 2024.1 发布 - 数据库和 SQL 跨平台 IDE 请访问原文链接&#xff1a;JetBrains DataGrip 2024.1 (macOS, Linux, Windows) - 数据库和 SQL 跨平台 IDE&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org JetBr…

服务器挖矿病毒解决ponscan,定时任务解决

服务器挖矿病毒解决ponscan&#xff0c;定时任务解决 挖矿病毒会隐藏chattr的操作权限&#xff0c;让我们无法删除病毒文件&#xff0c;杀掉病毒进程。所以要去下载chattr.c的文件&#xff0c;编译成a.out。然后再对原来的chattr文件的权限进行修改。然后覆盖掉它。 chattr.c …

论文读后感:探索Infini-attention——无限上下文的高效Transformer模型

在自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;Transformer模型因其卓越的性能而广受欢迎。然而&#xff0c;传统的Transformer模型在处理极长输入序列时面临着显著的挑战&#xff0c;尤其是在内存和计算资源的消耗上。最近&#xff0c;一篇名为《Leave No Contex…

笔试的解题思路很多,

昨天发的笔试题目&#xff0c;留言的人还挺多&#xff0c;这道笔试题目是字节的嵌入式笔试题目&#xff0c;从面试的朋友描述说&#xff0c;对方的面试过程很专业。 现场写代码&#xff0c; 金三银四一直是铁律&#xff0c;去年我一个朋友离职后&#xff0c;也是最近这几天拿到…

深入了解数据结构第四弹——排序(1)——插入排序和希尔排序

前言&#xff1a; 从本篇开始&#xff0c;我们就开始进入排序的学习&#xff0c;在结束完二叉树的学习之后&#xff0c;相信我们对数据在内存中的存储结构有了新的认识&#xff0c;今天开始&#xff0c;我们将进入排序的学习&#xff0c;今天来学习第一篇——插入排序 目录 什…

回溯算法中常见的使用方法逻辑整理

回溯算法 常见的使用方法逻辑整理 1. 回溯算法 特点 回溯算法实际上一个类似枚举的搜索尝试过程&#xff0c;主要是在搜索尝试过程中寻找问题的解&#xff0c;当发现已不满足求解条件时&#xff0c;就“回溯”返回&#xff0c;尝试别的路径。回溯法是一种选优搜索法&#xff0…

CentOS 7安装Nginx

说明&#xff1a;本文介绍如何在CentOS 7操作系统中安装Nginx 下载安装 首先&#xff0c;去官网上下载Nginx压缩包&#xff0c;官网地址&#xff1a;https://nginx.org/en/download.html&#xff0c;我这里下载稳定版1.24.0&#xff1b; 上传到云服务器上&#xff0c;解压&am…

Vue入门:天不生Vue,前端万古如长夜 - Vue从入门到放弃

目录 &#x1f44b; Vue环境搭建 1.安装node.js 2.配置环境变量 3.VSCode配置 4.安装Vue CLI 5.在VS Code中打开Vue项目 6.运行Vue项目 &#x1f440; Vue基础学习 1.引入vue.js 2.数据方法 3.生命周期&#xff01; 4.模板语法 5.对象语法 6.条件渲染 7.列表渲…

openstack安装dashboard后登录网页显示404错误

1. 2.进入该目录vim /etc/httpd/conf.d/openstack-dashboard.conf 增加这一行 WSGIApplicationGroup %{GLOBAL} 重启httpd后就可以访问了