classSolution{public List<Integer>spiralOrder(int[][] matrix){if(matrix == null || matrix.length ==0|| matrix[0].length ==0)returnnewLinkedList<Integer>();int n = matrix.length;int m = matrix[0].length;int[] dx ={-1,0,1,0};int[] dy ={0,1,0,-1};boolean[][] vis =newboolean[n][m];//是否访问过
List<Integer> ans =newLinkedList<>();int x=0,y=0;int d =1;for(int i =0;i < n*m;i++){
vis[x][y]=true;
ans.add(matrix[x][y]);int nx = x+dx[d];int ny = y+dy[d];if(nx <0|| nx >=n || ny <0|| ny>=m || vis[nx][ny])
d =(d+1)%4;//每次判断下一步是否可以走,不可以就开始换方向
x = x+dx[d];
y = y+dy[d];}return ans;}}