问题描述

给定一个包含 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-螺旋矩阵相关推荐

  1. leetcode 题解 54.螺旋矩阵(Typescript)

    /* * @lc app=leetcode.cn id=54 lang=typescript * * [54] 螺旋矩阵 */ //同69题中左闭右闭的处理方法 //力扣大神讲解点此 // @lc c ...

  2. leetcode系列-54. 螺旋矩阵

    题目描述:给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素. 示例 1: 输入:matrix = [[1,2,3],[4,5,6],[7,8,9]] 输出 ...

  3. LeetCode 59. 螺旋矩阵 II LeetCode 54. 螺旋矩阵

    文章目录 1. 题目信息 2. LeetCode 59 解题 3. LeetCode 54. 螺旋矩阵 4.<剑指Offer>面试题29 1. 题目信息 给定一个正整数 n,生成一个包含 ...

  4. LeetCode 54.螺旋矩阵 - 原地修改

    [LetMeFly]54.螺旋矩阵 - 原地修改 力扣题目链接:https://leetcode.cn/problems/spiral-matrix/ 给你一个 m行 n列的矩阵 matrix,请按照 ...

  5. Java实现 LeetCode 54 螺旋矩阵

    54. 螺旋矩阵 给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素. 示例 1: 输入: [ [ 1, 2, 3 ], [ 4, 5, 6 ], ...

  6. LeetCode实战:螺旋矩阵 II

    题目英文 Given a positive integer n, generate a square matrix filled with elements from 1 to n^2 in spir ...

  7. LeetCode-数组-54. 螺旋矩阵

    54. 螺旋矩阵 解题思路: 这里的方法不需要记录已经走过的路径,所以执行用时和内存消耗都相对较小 首先设定上下左右边界 其次向右移动到最右,此时第一行因为已经使用过了,可以将其从图中删去,体现在代码 ...

  8. 模拟法螺旋遍历矩阵:54.螺旋矩阵(Kotlin)

    54. 螺旋矩阵 给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素. 示例 1: 输入:matrix = [[1,2,3],[4,5,6],[7,8,9] ...

  9. LeetCode打卡 52八皇后Ⅱ53最大子序和54螺旋矩阵

    原创公众号:bigsai 希望和优秀的你做朋友,感觉不错还请一键三连. 回复进群即可加入和200+人一起打卡.上周打卡: LeetCode 47全排列Ⅱ&48旋转图像 LeetCode 49字 ...

  10. 力扣(LeetCode)54. 螺旋矩阵(C++)

    思路分析 螺旋矩阵,又称蛇形矩阵,这是说,遍历它就像蛇一样一环一环的向内滑动. 遍历时变向,我们需要一个技巧.开方向数组, d x , d y dx,dy dx,dy,分别代表 x x x 的移动方向 ...

最新文章

  1. 如果有一天 Pytorch / Tensorflow 不开源了,我们该怎么办?
  2. It Smells!不要让两个状态纠缠的类同时成为某个事件的观察者(一切都只是视图)...
  3. 64MQQ2440烧写MINI2440光盘中的内容同样可以跑起来
  4. 太酷了!龙族幻想时装制作的秘密都在这里了!
  5. 查看ftp创建的用户
  6. InnoDB IO子系统介绍
  7. KafkaController 分区Rebalance平衡机制
  8. 【LeetCode】 sort list 单清单归并
  9. 【linux之bash】
  10. HeidiSQL使用教程
  11. 3.15PMP试题每日一题
  12. 紫色范冰冰WIN7主题包
  13. Android 福彩3D体彩排列(源码+算法)
  14. 倒立摆 adams matlab,基于ADAMS与MATLAB联合仿真地倒立摆设计毕业论文.docx
  15. 用计算机绘制工作表,《计算机操作基础Excel练习题答案.doc
  16. 光纤交换机分为哪几种 光纤交换机连接图
  17. t恤衫尺码对照表_T恤衫
  18. scala特征加工中的报错记录和调试
  19. flink SQL与hbase整合
  20. 上汽荣威E50 颇有想法的纯电动产品

热门文章

  1. 每天都用微信聊天,但你可能不知道它还隐藏着这些超实用的功能
  2. 软件测试基础课程学习笔记6--测试执行的几点技巧
  3. java邮箱代码_java邮箱开发代码——发邮件
  4. ffmpeg 2.6.3在Linux下的编译
  5. oracle出现The Network Adapter could not establish the connection的问题
  6. 如果使用 sftp 命令
  7. 【无标题】Kafka副本管理—— 为何去掉replica.lag.max.messages参数
  8. 【Flink】Flink Heartbeat of TaskManager with id timed out.
  9. 【SpringCloud】服务网关 gateway 和 zuul
  10. 【java】java 关键字: final详解