LeetCode——54. 螺旋矩阵(Spiral Matrix)[中等]——分析及代码(Java)

LeetCode——54. 螺旋矩阵[Spiral Matrix][中等]——分析及代码[Java]

一、题目

给你一个 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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/spiral-matrix
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

二、分析及代码

1. 逐层遍历

(1)思路

根据题目要求,逐层按顺时针方向遍历矩阵中的各个元素并记录。

(2)代码

class Solution {
    
    
    public List<Integer> spiralOrder(int[][] matrix) {
    
    
        int m = matrix.length, n = matrix[0].length;
        List<Integer> ans = new ArrayList<>();//输出数组
        int range = m * n, left = 0, right = n - 1, top = 1, bottom = m - 1;//输出元素个数,矩阵左、右、上、下边界
        int i = 0, j = 0, layer = 0;//当前输出元素坐标,所处层数
        ans.add(matrix[i][j]);
        while (ans.size() < range) {
    
    //通过已处理的元素个数判断是否完成
            while (j < right - layer)//向右
                ans.add(matrix[i][++j]);
            while (i < bottom - layer)//向下
                ans.add(matrix[++i][j]);
            while (ans.size() < range && j > left + layer)//若尚未完成,继续向左
                ans.add(matrix[i][--j]);
            while (ans.size() < range && i > top + layer)//若尚未完成,继续向上
                ans.add(matrix[--i][j]);
            layer++;//层数增加
        }
        return ans;
    }
}

(3)结果

执行用时 :0 ms,在所有 Java 提交中击败了 100.00% 的用户;
内存消耗 :36.6 MB,在所有 Java 提交中击败了 59.51% 的用户。

三、其他

暂无。

猜你喜欢

转载自blog.csdn.net/zml66666/article/details/114846642
今日推荐