54. 螺旋矩阵[中等]

74 阅读1分钟

题目

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

图片.png

解法一

思路

定义4个方向坐标。

记录是否访问过。

代码

    public List<Integer> spiralOrder(int[][] matrix) {
        int m = matrix.length;
        int n = matrix[0].length;
        int x = 0;
        int y = 0;
        int[] dx = {0, 1, 0, -1};
        int[] dy = {1, 0, -1, 0};
        int d = 0;
        boolean[][] visited = new boolean[m][n];
        List<Integer> list = new LinkedList<>();
        for (int i = 0; i < m * n; i++) {
            visited[x][y] = true;
            list.add(matrix[x][y]);
            int a = x + dx[d];
            int b = y + dy[d];
            if (a < 0 || a >= m || b < 0 || b >= n || visited[a][b]) {
                d = (d + 1) % 4;
            }
            x = x + dx[d];
            y = y + dy[d];
        }
        return list;
    }

复杂度

  • 时间复杂度:O(mn)
  • 空间复杂度:O(mn)