【LeetCode】Spiral Matrix(螺旋矩阵)
这是LeetCode里的第54道题。
题目要求:
给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。
示例 1:
- 输入:
- [
- [ 1, 2, 3 ],
- [ 4, 5, 6 ],
- [ 7, 8, 9 ]
- ]
- 输出: [1,2,3,6,9,8,7,4,5]
示例 2:
- 输入:
- [
- [1, 2, 3, 4],
- [5, 6, 7, 8],
- [9,10,11,12]
- ]
- 输出: [1,2,3,4,8,12,11,10,9,5,6,7]
核心思想:
无脑用循环,设置条件,并且注意边界和圈数,进行合理的控制。走一圈如下图所示:
可以发现,走完一圈以后每一行(列)的边界都向里压缩了一个单位。所以主要处理好边界和数的位置。
声明right和down变量,代表右和下方向。取反则为反方向。因为取数先向右,后向下,后向左,最后向上。如此往复。
- class Solution {
- public:
- vector<int> spiralOrder(vector<vector<int>>& matrix) {
- /*
- vector<int>no;//这是为了返回空值而设置的变量
- if(matrix.size()==0)return no;//没有数据返回空
- if(matrix[0].size()==0)return no;//虽然有行,但是每一行都没数据,返回空
- */
- if (matrix.empty() || matrix[].empty()) return {};//以上代码合并
- int n=matrix.size(),m=matrix[].size();//n为行数,m为列数
- vector<int>res(n*m,);//大小为n*m,并初始化为0的线性表
- int times=;//记录走了几圈
- int right=,down=,i=,j=,ii=,jj=;
- for(ii=;ii<n;ii++){
- for(jj=;jj<m;jj++){
- res[ii*m+jj]=matrix[i][j];
- if(j<m-times&&i==times){
- if(j==m-times-){i=i+down;continue;}//判断是否走到了边界,下走
- j=j+right;}//右走
- else if (i<n-times&&j==m-times-){
- if (i==n-times-){j=j-right;continue;}//判断是否走到了边界,左走
- i=i+down;}//下走
- else if(j>=&&i==n-times-){
- if(j==times){i =i-down;continue;}//判断是否走到了边界,上走
- j=j-right;}//左走
- else if(i>=&&j==times){
- if(i==times+){j=j+right;times++;continue;}//判断是否走到了边界,右走
- i=i-down;}//上走
- }
- }
- return res;
- }
- };
运行结果:
个人总结:
因为我之前写过这个题目,所以做起来思路还是很清晰的,我个人认为,我这个算法缺点在于判断次数过多。不够简洁。之前是用的上下左右四个边界设值来判断拐弯条件。代码没有那么复杂也更好理解,而且这里要求返回的结果是一维的数组,而之前做的题目要求返回的是二维数组,这道题难度降低了点。
【LeetCode】Spiral Matrix(螺旋矩阵)的更多相关文章
- [LeetCode] Spiral Matrix 螺旋矩阵
Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral or ...
- [算法][LeetCode]Spiral Matrix——螺旋矩阵
题目要求 Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spir ...
- Leetcode 54:Spiral Matrix 螺旋矩阵
54:Spiral Matrix 螺旋矩阵 Given a matrix of m x n elements (m rows, n columns), return all elements of t ...
- leetCode 54.Spiral Matrix(螺旋矩阵) 解题思路和方法
Spiral Matrix Given a matrix of m x n elements (m rows, n columns), return all elements of the matri ...
- PAT甲级——1105 Spiral Matrix (螺旋矩阵)
此文同步发布在CSDN:https://blog.csdn.net/weixin_44385565/article/details/90484058 1105 Spiral Matrix (25 分) ...
- [leetcode]54. Spiral Matrix螺旋矩阵
Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral or ...
- 第29题:LeetCode54:Spiral Matrix螺旋矩阵
给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素. 示例 1: 输入: [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ...
- Leetcode54. Spiral Matrix螺旋矩阵
给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素. 示例 1: 输入: [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ...
- spiral matrix 螺旋矩阵
Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral or ...
随机推荐
- UG 常用设置
Q01:UG制图,添加基本视图之后的中心线怎么去掉? A01:“菜单-->文件-->首选项-->制图-->视图-->公共-->常规-->□带中心线创建”,取消 ...
- 基于阿里云SLB/ESS/EIP/ECS/VPC的同城高可用方案演练
今天基于阿里云SLB/ESS/EIP/ECS/VPC等产品进行了一次同城高可用方案演练: 基本步骤如下: 1. 在华东1创建VPC网络VPC1,在华东1可用区B和G各创建一个虚拟交换机vpc1_swi ...
- 如何实现序列化为json
因为需要观察对象的数据,所以寻找能自动描述对象中字段名和其值的描述类,咨询了不少人,都推荐使用json,但是json使用起来有一点额外的操作. 需要在文件中引用 using System.Web.Sc ...
- [已读]JavaScript DOM高级程序设计
08年出版,但是不得不说内容很好,正如书名,重点是DOM部分,看的还蛮早的,这本,记得是13年.
- Dubbo理论知识
本文是作者根据官方文档以及自己平时的使用情况,对 Dubbo 所做的一个总结.如果不懂 Dubbo 的使用的话,可以参考我的这篇文章<超详细,新手都能看懂 !使用SpringBoot+Dubbo ...
- mysql添加用户并赋予权限命令
添加用户: create user 'gouge'@'localhost' identified by 'gouge'; 赋予权限: 给gouge 用户赋予所有test开头的数据库权限 (test% ...
- hihocoder1777 彩球
思路: 记录一下快速幂计算过程中爆long long的两种解决方法: 1. 使用__int128,这玩意本地编译不通过,提交OJ能AC. 实现: #include <bits/stdc++.h& ...
- EJB开发基础——EJB规范
1.EJB 容器 Enterprise Bean 是在称作 EJB 容器的特殊环境中运行的软件组件.容器容纳和管理 Enterprise Bean 的方式与 Java Web 服务器 ...
- CodeForces 219D Choosing Capital for Treeland (树形DP)
题意:给一个树形图,n个节点,n-1条有向边,要求选一个节点作为根,使需要改变方向的边的数目最少.并输出所有可能作为根的点. 思路: 先随便一个点进行DFS,计算将每棵子树的边全部往下时,所需要的费用 ...
- Android(java)学习笔记139:Android中Menu的使用(静态 和 动态)
1. 使用xml定义Menu(静态方法) 菜单资源文件必须放在res/menu目录中.菜单资源文件必须使用<menu>标签作为根节点.除了<menu>标签外,还有另外两个标签用 ...