【LeetCode】54. 螺旋矩阵
创始人
2024-11-04 21:07:52
0

螺旋矩阵

题目描述:

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

示例 1:

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

示例 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]

提示:

  • m == matrix.length
  • n == matrix[i].length
  • 1 <= m, n <= 10
  • -100 <= matrix[i][j] <= 100

思路分析:

  1. 初始化边界
    首先,我们需要定义四个边界变量,分别表示矩阵的上边界(top)、下边界(bottom)、左边界(left)和右边界(right)。初始时,这些边界分别设置为矩阵的第一行、最后一行、第一列和最后一列。

  2. 循环遍历
    使用一个循环来遍历矩阵的边界。在每次循环中,我们按照顺时针的顺序遍历矩阵的四个边界(上、右、下、左),并将遍历到的元素添加到结果列表中。

  3. 更新边界
    在遍历完每个边界后,我们需要根据遍历的方向来更新相应的边界变量。具体来说:

    • 遍历完上边界后,上边界下移(top++)。
    • 遍历完右边界后,右边界左移(right--)。
    • 遍历完下边界后,下边界上移(bottom--)。
    • 遍历完左边界后,左边界右移(left++)。
  4. 终止条件
    循环会一直进行,直到四个边界交叉,即左边界超过右边界(left > right)或上边界超过下边界(top > bottom)。这时,表示矩阵中的所有元素都已经被遍历完毕,可以结束循环。

  5. 返回结果
    循环结束后,返回存储了按顺时针螺旋顺序遍历的矩阵元素的结果列表。

        注意,在遍历右边界和下边界时,需要添加一个检查来确保内部还有元素需要遍历。这是因为当矩阵的行数或列数为奇数时,遍历完上边界和左边界后,右边界或下边界可能只剩下单独的一行或一列。如果不进行检查,就会在这一行或一列上重复遍历,导致结果错误。

代码实现:

class Solution {     public List spiralOrder(int[][] matrix) {         List result = new ArrayList<>(); // 初始化结果列表           if (matrix == null || matrix.length == 0 || matrix[0].length == 0) {               // 如果矩阵为空或没有行/列,则直接返回空的结果列表               return result;           }           int left = 0, right = matrix[0].length - 1; // 初始化左右边界           int top = 0, bottom = matrix.length - 1; // 初始化上下边界           while (left <= right && top <= bottom) {               // 遍历上边界               for (int i = left; i <= right; i++) {                   result.add(matrix[top][i]); // 将上边界的元素添加到结果列表中               }               top++; // 上边界下移               // 遍历右边界               for (int i = top; i <= bottom; i++) {                   result.add(matrix[i][right]); // 将右边界的元素添加到结果列表中               }               right--; // 右边界左移               // 检查是否还有内部元素需要遍历(避免在只剩一行或一列时重复遍历)               if (top <= bottom) {                   // 遍历下边界                   for (int i = right; i >= left; i--) {                       result.add(matrix[bottom][i]); // 将下边界的元素添加到结果列表中                   }                   bottom--; // 下边界上移               }               if (left <= right) {                   // 遍历左边界                   for (int i = bottom; i >= top; i--) {                       result.add(matrix[i][left]); // 将左边界的元素添加到结果列表中                   }                   left++; // 左边界右移               }           }           return result; // 返回结果列表       } }

相关内容

热门资讯

6分钟安卓版本!wpk俱乐部会... 6分钟安卓版本!wpk俱乐部会员管理软件,wepower软件靠谱,必备教程(有挂私人局)1、很好的工...
教你攻略(wePoKe)外挂透... 教你攻略(wePoKe)外挂透明挂辅助挂(线上德州有后台控制)其实真的有挂(有挂长期);1、完成线上...
6分钟熟悉!传奇扑克辅助,好运... 6分钟熟悉!传奇扑克辅助,好运大菠萝的确真的有挂,2025版教程(有挂发现)1、用户打开应用后不用登...
5分钟最新版!wepoke有规... 5分钟最新版!wepoke有规律,微扑克德州专用辅助器,德州论坛(有挂计算器)1、微扑克德州专用辅助...
辅助教程(哈糖大菠萝十三张)外... 辅助教程(哈糖大菠萝十三张)外挂透明挂辅助安装(德州ai机器人免费测试)果然真的有挂(有挂漏洞)1、...
五分钟熟悉!wepkoe有外挂... 五分钟熟悉!wepkoe有外挂,鱼扑克果然真的有挂,wepoke教程(有挂介绍);一、wepkoe有...
八分钟苹果版本!wepoke有... 八分钟苹果版本!wepoke有规律,wpk微扑克真的有助辅,2025新版教程(有挂方法)1、进入游戏...
新版8分钟!GG扑克辅助软件w... 新版8分钟!GG扑克辅助软件wepoke系统是免费的(本来真的有挂)-哔哩哔哩;wepoke系统是免...
可靠教程(AAPOker)外挂... 可靠教程(AAPOker)外挂透明挂辅助插件(wepower让系统发好牌)总是真的有挂(有挂后台);...
九分钟大厅!德扑ai智能机器人... 九分钟大厅!德扑ai智能机器人线上代打,wepoke软件还可以用,技巧教程(有挂教学)1)德扑ai智...