[leetcode] 54. 螺旋矩阵

Posted ACBingo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[leetcode] 54. 螺旋矩阵相关的知识,希望对你有一定的参考价值。

54. 螺旋矩阵

模拟

还是用老技巧,用一个dx来描述某个方向的i,j坐标变换情况。
int[][] dx = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};
如果按题目中的例子来看的话,分别表示向左,下,右,上走时,i,j坐标应该如何变换

class Solution {
    public List<Integer> spiralOrder(int[][] matrix) {
        int m = matrix.length;
        List<Integer> ans = new ArrayList<>();
        if (m <= 0) {
            return ans;
        }
        int n = matrix[0].length;

        int[][] dx = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};
        boolean[][] f = new boolean[m][n];
        int cur = 0;
        int i = 0, j = 0;
        while (true) {
            ans.add(matrix[i][j]);
            f[i][j] = true;
            if (i + dx[cur][0] >= m || i + dx[cur][0] < 0
                    || j + dx[cur][1] >= n || j + dx[cur][1] < 0
                    || f[i + dx[cur][0]][j + dx[cur][1]]) {
                cur = (cur + 1) % 4;
                if (i + dx[cur][0] >= m || i + dx[cur][0] < 0
                        || j + dx[cur][1] >= n || j + dx[cur][1] < 0
                        || f[i + dx[cur][0]][j + dx[cur][1]]) {
                    break;
                }
            }
            i += dx[cur][0];
            j += dx[cur][1];
        }
        return ans;
    }
}


以上是关于[leetcode] 54. 螺旋矩阵的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode 54.螺旋矩阵

Leetcode 54.螺旋矩阵

模拟LeetCode 54. 螺旋矩阵

模拟LeetCode 54. 螺旋矩阵

LeetCode:螺旋矩阵54

Leetcode54. 螺旋矩阵(简单模拟)