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]
算法思想
本题可以直接用循环来实现,我们需要先计算m和n、以及m*n的值,然后定义一个保存遍历结果的集合,以及visited标记数组。并且把第一个元素放入到集合中并标记为1。然后进入到while循环,按照顺时针的顺序依次往右、下、左、上等四个方向走,如果可以往某一个方向走,就需要把这个元素的值添加到集合中并标记,然后遍历到的元素个数就加1,每次在走之前,都需要判断一下我们二维数组中的元素是否已经访问完了,访问完了就可以退出循环,具体代码如下。
代码实现
class Solution {public List<Integer> spiralOrder(int[][] matrix) {//计算矩阵中元素个数和m,n的值List<Integer> list=new ArrayList<Integer>();int m=matrix.length;if(m==0){return list;}int n=matrix[0].length;int numbers=m*n;int visited[][] =new int[m][n]; //标记数组//访问matrix[0][0],并将其标记。list.add(matrix[0][0]);visited[0][0]=1;int k=1; //当前遍历到的元素个数int i=0,j=0; //矩阵的横纵坐标while(k<numbers){//向右走while((j+1<n)&&(visited[i][j+1]==0)){//如果可以向右走,则执行右走,访问并标记该元素,遍历到的元素个数加1j++;list.add(matrix[i][j]);visited[i][j]=1;k++; }//在走下一步之前,需要先判断二维数组中的元素是否已经访问完成了。if(k>=numbers){break;}//向下走while((i+1<m)&&(visited[i+1][j]==0)){i++;list.add(matrix[i][j]);visited[i][j]=1;k++; }if(k>=numbers){break;}//向左走while((j-1>=0)&&(visited[i][j-1]==0)){j--;list.add(matrix[i][j]);visited[i][j]=1;k++; }if(k>=numbers){break;}//向上走while((i-1>=0)&&(visited[i-1][j]==0)){i--;list.add(matrix[i][j]);visited[i][j]=1;k++; }}return list;}
}
leetcode题解54-螺旋矩阵相关推荐
- leetcode 题解 54.螺旋矩阵(Typescript)
/* * @lc app=leetcode.cn id=54 lang=typescript * * [54] 螺旋矩阵 */ //同69题中左闭右闭的处理方法 //力扣大神讲解点此 // @lc c ...
- leetcode系列-54. 螺旋矩阵
题目描述:给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素. 示例 1: 输入:matrix = [[1,2,3],[4,5,6],[7,8,9]] 输出 ...
- LeetCode 59. 螺旋矩阵 II LeetCode 54. 螺旋矩阵
文章目录 1. 题目信息 2. LeetCode 59 解题 3. LeetCode 54. 螺旋矩阵 4.<剑指Offer>面试题29 1. 题目信息 给定一个正整数 n,生成一个包含 ...
- LeetCode 54.螺旋矩阵 - 原地修改
[LetMeFly]54.螺旋矩阵 - 原地修改 力扣题目链接:https://leetcode.cn/problems/spiral-matrix/ 给你一个 m行 n列的矩阵 matrix,请按照 ...
- Java实现 LeetCode 54 螺旋矩阵
54. 螺旋矩阵 给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素. 示例 1: 输入: [ [ 1, 2, 3 ], [ 4, 5, 6 ], ...
- LeetCode实战:螺旋矩阵 II
题目英文 Given a positive integer n, generate a square matrix filled with elements from 1 to n^2 in spir ...
- LeetCode-数组-54. 螺旋矩阵
54. 螺旋矩阵 解题思路: 这里的方法不需要记录已经走过的路径,所以执行用时和内存消耗都相对较小 首先设定上下左右边界 其次向右移动到最右,此时第一行因为已经使用过了,可以将其从图中删去,体现在代码 ...
- 模拟法螺旋遍历矩阵:54.螺旋矩阵(Kotlin)
54. 螺旋矩阵 给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素. 示例 1: 输入:matrix = [[1,2,3],[4,5,6],[7,8,9] ...
- LeetCode打卡 52八皇后Ⅱ53最大子序和54螺旋矩阵
原创公众号:bigsai 希望和优秀的你做朋友,感觉不错还请一键三连. 回复进群即可加入和200+人一起打卡.上周打卡: LeetCode 47全排列Ⅱ&48旋转图像 LeetCode 49字 ...
- 力扣(LeetCode)54. 螺旋矩阵(C++)
思路分析 螺旋矩阵,又称蛇形矩阵,这是说,遍历它就像蛇一样一环一环的向内滑动. 遍历时变向,我们需要一个技巧.开方向数组, d x , d y dx,dy dx,dy,分别代表 x x x 的移动方向 ...
最新文章
- 如果有一天 Pytorch / Tensorflow 不开源了,我们该怎么办?
- It Smells!不要让两个状态纠缠的类同时成为某个事件的观察者(一切都只是视图)...
- 64MQQ2440烧写MINI2440光盘中的内容同样可以跑起来
- 太酷了!龙族幻想时装制作的秘密都在这里了!
- 查看ftp创建的用户
- InnoDB IO子系统介绍
- KafkaController 分区Rebalance平衡机制
- 【LeetCode】 sort list 单清单归并
- 【linux之bash】
- HeidiSQL使用教程
- 3.15PMP试题每日一题
- 紫色范冰冰WIN7主题包
- Android 福彩3D体彩排列(源码+算法)
- 倒立摆 adams matlab,基于ADAMS与MATLAB联合仿真地倒立摆设计毕业论文.docx
- 用计算机绘制工作表,《计算机操作基础Excel练习题答案.doc
- 光纤交换机分为哪几种 光纤交换机连接图
- t恤衫尺码对照表_T恤衫
- scala特征加工中的报错记录和调试
- flink SQL与hbase整合
- 上汽荣威E50 颇有想法的纯电动产品
热门文章
- 每天都用微信聊天,但你可能不知道它还隐藏着这些超实用的功能
- 软件测试基础课程学习笔记6--测试执行的几点技巧
- java邮箱代码_java邮箱开发代码——发邮件
- ffmpeg 2.6.3在Linux下的编译
- oracle出现The Network Adapter could not establish the connection的问题
- 如果使用 sftp 命令
- 【无标题】Kafka副本管理—— 为何去掉replica.lag.max.messages参数
- 【Flink】Flink Heartbeat of TaskManager with id timed out.
- 【SpringCloud】服务网关 gateway 和 zuul
- 【java】java 关键字: final详解