54. 螺旋矩阵
题目描述:
给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。
考察重点:使用全局变量way数组,配合变量n记录走的方向;nowX,nowY记录当前位置;并将走过的位置置为101,不可再走;当发现n,n+1都无路可走时,说明遍历完成,返回结果链表list。
int way[][] = new int[][]{{0, 1}, {1, 0}, {0, -1}, {-1, 0}};
int nowX, nowY;
public int goWay(int[][] matrix, int n){nowX += way[n][0];nowY += way[n][1];if(nowX < matrix.length && nowX >= 0 && nowY < matrix[0].length && nowY >= 0 && matrix[nowX][nowY] != 101)return n;nowX -= way[n][0];nowY -= way[n][1];if(n + 1 < way.length)n ++;elsen = 0;nowX += way[n][0];nowY += way[n][1];if(nowX < matrix.length && nowX >= 0 && nowY < matrix[0].length && nowY >= 0 && matrix[nowX][nowY] != 101)return n;nowX -= way[n][0];nowY -= way[n][1];return way.length;
}
public List<Integer> spiralOrder(int[][] matrix) {List<Integer> list = new ArrayList<>();list.add(matrix[0][0]);matrix[0][0] = 101;int n = 0;while(true){n = goWay(matrix, n);if(n == way.length)break;list.add(matrix[nowX][nowY]);matrix[nowX][nowY] = 101;}return list;
}