LeetCode 54. Spiral Matrix

LeetCode 54. Spiral Matrix (螺旋矩阵)

题目

链接

https://leetcode-cn.com/problems/spiral-matrix/

问题描述

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

示例

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

提示

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

思路

就一圈一圈的,只需要设置好边界值即可,我用tag来避免产生死循环。

复杂度分析

时间复杂度 O(n*m)
空间复杂度 O(n*m)

代码

Java

   public List<Integer> spiralOrder(int[][] matrix) {
        int n = matrix.length;
        int m = matrix[0].length;
        List<Integer> ans = new ArrayList<>();
        int up = 0;
        int down = n - 1;
        int left = 0;
        int right = m - 1;
        int x = 0;
        int y = -1;
        int turn = 0;
        int tag = 0;
        for (int i = 1; i <= n * m && tag != 4; i++) {
            if (turn == 0) {
                if (y < right) {
                    y++;
                    ans.add(matrix[x][y]);
                    tag = 0;
                } else {
                    up++;
                    i--;
                    turn = 1;
                    tag++;
                }
            } else if (turn == 1) {
                if (x < down) {
                    x++;
                    ans.add(matrix[x][y]);
                    tag = 0;
                } else {
                    right--;
                    i--;
                    turn = 2;
                    tag++;
                }
            } else if (turn == 2) {
                if (y > left) {
                    y--;
                    ans.add(matrix[x][y]);
                    tag = 0;
                } else {
                    down--;
                    i--;
                    turn = 3;
                    tag++;
                }
            } else {
                if (x > up) {
                    x--;
                    ans.add(matrix[x][y]);
                    tag = 0;
                } else {
                    left++;
                    i--;
                    turn = 0;
                    tag++;
                }
            }
        }
        return ans;
    }
posted @ 2022-04-28 21:33  cheng102e  阅读(11)  评论(0编辑  收藏  举报