题目
给你一个 m
行 n
列的矩阵 matrix
,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。
解题思路
DFS,四个方向,走到边界或者走到走过的地方就换另一个方向。由于每个节点的值域为[-100, 100]
,走过的地方设成了 -101
,作为标签。
代码
class Solution {
public final int[][] turn = new int[][]{{0, 1}, {1, 0}, {0, -1}, {-1, 0}};
public void dfs(List<Integer> ans, int[][] matrix, int raw, int col, int pos) {
ans.add(matrix[raw][col]);
matrix[raw][col] = -101;
for (int i = 0; i < 4; i++) {
int nextRaw = raw + turn[(pos + i) % 4][0];
int nextCol = col + turn[(pos + i) % 4][1];
if (nextRaw < 0 || nextRaw >= matrix.length || nextCol < 0 || nextCol >= matrix[0].length) continue;
if (matrix[nextRaw][nextCol] == -101) continue;
dfs(ans, matrix, nextRaw, nextCol, (pos + i) % 4);
}
}
public List<Integer> spiralOrder(int[][] matrix) {
List<Integer> ans = new ArrayList<>();
dfs(ans, matrix, 0, 0, 0);
return ans;
}
}