leetcode 54. 螺旋矩阵

news/2024/11/28 7:33:52/

题目链接:leetcode 54

1.题目

给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。

2.示例

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

2)示例 2:
输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
输出:[1,2,3,4,8,12,11,10,9,5,6,7]

3)提示:
m == matrix.length
n == matrix[i].length
1 <= m, n <= 10
-100 <= matrix[i][j] <= 100

3. 分析

根据分析,可以发现顺时针螺旋顺序分别是向右,向下,向左,向上再向右,可以记录元素是否被访问来确定以上四个方向的边界

4.代码

class Solution {
public:vector<int> ans;bool vis[15][15];bool check(int x,int y,vector<vector<int>>& matrix){int n=matrix.size(),m=matrix[0].size();if(x<0||x>=n) return false;if(y<0||y>=m) return false;if(vis[x][y]==true) return false;return true;}void get_dfs(int x,int y,vector<vector<int>>& matrix,int op) {vis[x][y]=true;ans.push_back(matrix[x][y]);int n=matrix.size(),m=matrix[0].size();if(op==0){if(check(x,y+1,matrix)) get_dfs(x,y+1,matrix,op);else {if(check(x+1,y,matrix)) get_dfs(x+1,y,matrix,1);}return;}if(op==1){if(check(x+1,y,matrix))get_dfs(x+1,y,matrix,op);else {if(check(x,y-1,matrix)) get_dfs(x,y-1,matrix,2);}return;}if(op==2){if(check(x,y-1,matrix)) get_dfs(x,y-1,matrix,op);else {if(check(x-1,y,matrix)) get_dfs(x-1,y,matrix,3);}return;}if(check(x-1,y,matrix)) get_dfs(x-1,y,matrix,op);else {if(check(x,y+1,matrix)) get_dfs(x,y+1,matrix,0);}}vector<int> spiralOrder(vector<vector<int>>& matrix) {memset(vis,false,sizeof(vis));get_dfs(0,0,matrix,0);return ans;}
};

http://www.ppmy.cn/news/68982.html

相关文章

Redis可持久化详解2

目录 ​编辑 Redis的持久化配置参数&#xff1a; 2.Redis的性能问题&#xff1a; 3保持久化数据的完整性和正确性&#xff1a; 4.Redis的集群技术&#xff1a; 总结&#xff1a; Redis持久化不得不注意的一些地方。 Redis的持久化配置参数&#xff1a; save&#xff1a;指…

Camtasia2023.0.1CS电脑录制屏幕动作工具新功能介绍

Camtasia Studio是一款专门录制屏幕动作的工具&#xff0c;它能在任何颜色模式下轻松地记录 屏幕动作&#xff0c;包括影像、音效、鼠标移动轨迹、解说声音等等&#xff0c;另外&#xff0c;它还具有即时播放和编 辑压缩的功能&#xff0c;可对视频片段进行剪接、添加转场效果。…

java字符串非英文字母的替换为空格,将空格替换为空字符串,将英文字母按五个拆分一组

可以使用正则表达式来匹配符合条件的字符&#xff0c;然后再进行替换和拆分。具体实现如下&#xff1a; String str "Hello, 123 world! Welcome to Java."; // 将非英文字母替换为空格 str str.replaceAll("[^a-zA-Z]", " "); // 将空格替换…

【综述】结构化剪枝

目录 摘要 分类 1、依赖权重 2、基于激活函数 3、正则化 3.1 BN参数正则化 3.2 额外参数正则化 3.3 滤波器正则化 4、优化工具 5、动态剪枝 6、神经架构搜索 性能比较 摘要 深度卷积神经网络&#xff08;CNNs&#xff09;的显著性能通常归因于其更深层次和更广泛的架…

【改进粒子群优化算法】自适应惯性权重粒子群算法(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

网络安全这条路到底该怎么走?

我之前就写过一篇文章专门解答了这个问题。但是还是有很多小伙伴并不清楚这条路该怎么走下去&#xff01; 不同于Java、C/C等后端开发岗位有非常明晰的学习路线&#xff0c;网路安全更多是靠自己摸索&#xff0c;要学的东西又杂又多&#xff0c;难成体系。 网络安全虽然是计算…

4. JVM内存管理

JVM是什么? JVM是一种规范. JVM用来干什么? Java虚拟机将字节码文件(.class)编译成操作系统可以识别的机器码. Java程序的执行过程 java程序首先经过javac编译成.class文件,然后jvm将其翻译成操作系统可以识别的机器码. JVM、JRE、JDK之间的关系 JVM只是一个翻译,将字节码…

尚硅谷JUC

文章目录 1. 什么是JUC1.1 JUC简介1.2 进程和线程基本概念2.1 Synchronized2.1.1 Synchronized关键字2.1.2 synchronized实现三个线程卖30张票 2.2 Lock2.2.1 什么是Lock2.2.2 使用Lock实现买票功能2.2.3 两者的区别 3. 线程间通信及定制化通信3.1 使用synchronized实现线程之间…