import java.util.*;
public class Solution {
public ArrayList<Integer> spiralOrder(int[][] matrix) {
// 右下左上四个方向
int[] dx = {0, 1, 0, -1};
int[] dy = {1, 0, -1, 0};
ArrayList<Integer> list = new ArrayList<>();
if (matrix == null || matrix.length == 0) return new ArrayList<>();
int n = matrix.length, m = matrix[0].length;
int x = 0, y = 0, d = 0;
boolean[][] vis = new boolean[15][15];
// 使用数的个数作为循环的依据
for (int i = 1; i <= n * m; i++) {
list.add(matrix[x][y]);
vis[x][y] = true;
int tx = x + dx[d], ty = y + dy[d];
// 是否越界或是否已经读取过
if (tx < 0 || tx >= n || ty < 0 || ty >= m || vis[tx][ty]) {
d = (d + 1) % 4;
tx = x + dx[d];
ty = y + dy[d];
}
x = tx;
y = ty;
}
return list;
}
}