leetcode 54. 螺旋矩阵-java实现

题目所属分类

螺旋矩阵 这题对做dfs等题 有基础意义

原题链接

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

代码案例:在这里插入图片描述

题解

class Solution {
    public List<Integer> spiralOrder(int[][] matrix) {
            List<Integer> res = new ArrayList<>();
            int n = matrix.length;
            if(n == 0 ) return res ;
            int m = matrix[0].length ;
            //判定是否走过
            boolean[][] st = new boolean[n][m];
            //右下左上
            int dx[] = {0, 1, 0, -1}, dy[] = {1, 0, -1, 0};
            //左上角的位置是x,y = 0,方向b=0   
            for(int i = 0 , x = 0 , y = 0 ,d=0 ; i < n *m ; i ++) {
                res.add(matrix[x][y]);
                st[x][y] = true ;             
                     int a = x + dx[d];
                     int b = y + dy[d];
                     if(a < 0 || a >= n || b < 0 || b >= m || st[a][b]) {//出界了
                            d = (d+1) % 4;
                             a = x + dx[d];
                             b = y + dy[d];
                     }
                     x = a;
                     y = b ;
                                              
            }
            return res ;
    }
}
posted @ 2022-10-11 18:57  依嘫  阅读(18)  评论(0)    收藏  举报