力扣 | 54. 螺旋矩阵

时间:2024-04-17 07:13:33
public List<Integer> spiralOrder(int [][] matrix){ List<Integer> result = new ArrayList<>(); int m = matrix.length; int n = matrix[0].length; int row=0,col = 0; //每个位置是否访问过/添加过 boolean [][] visited = new boolean[m][n]; //四个方向 int [][] dirs = {{0,1},{1,0},{0,-1},{-1,0}}; for (int i = 0,di = 0; i < m * n; i++) { result.add(matrix[row][col]); //添加该元素之后就该设置为已访问 visited[row][col] = true; //按照顺时针的方向设置row和col int nextRow = row + dirs[di][0]; int nextCol = col + dirs[di][1]; //判断新的row col 是否越界 或者 该位置元素是否被访问过 注意这里最多只会触发一个不满足条件 if(nextRow < 0 || nextRow >= m || nextCol < 0 || nextCol >= n || visited[nextRow][nextCol] == true){ //改变新的方向后,一定会满足条件 di = (di + 1) % 4; } //将新的 row col设置为新的值 row = row + dirs[di][0]; col = col + dirs[di][1]; } return result; }