螺旋矩阵
给你一个 m
行 n
列的矩阵 matrix
,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。
示例 1:
1 2
| 输入:matrix = [[1,2,3],[4,5,6],[7,8,9]] 输出:[1,2,3,6,9,8,7,4,5]
|
示例 2:
1 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
定义两个向量vx
和vy
,表示按照顺时针方向前进,用d
表示前进方向,走到矩阵边缘或者已经遍历过之后用取模的方式改变d
的值改变方向。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| class Solution { public List<Integer> spiralOrder(int[][] matrix) { int x = 0, y = 0; int vx[] = {0, 1, 0, -1}; int vy[] = {1, 0, -1, 0}; int d = 0; int m = matrix.length, n = matrix[0].length; List<Integer> list = new ArrayList<>(); for (int i = 0; i < m * n; i++) { list.add(matrix[x][y]); matrix[x][y] = 200; if (x + vx[d] < 0 || x + vx[d] >= m || y + vy[d] < 0 || y + vy[d] >= n || matrix[x + vx[d]][y + vy[d]] == 200) d = (d + 1) % 4; x += vx[d]; y += vy[d]; } return list; } }
|