力扣第54题 中等难度 螺旋矩阵
先看一眼题:
思路:其实和48题一个思路,每次把一圈的数字加到结果里,控制好递归结束的位置就好了 代码:
public List<Integer> spiralOrder(int[][] matrix) { List<Integer> list = new ArrayList<>(); __spiralOrder(0, matrix, list); return list; } public void __spiralOrder(int start, int[][] matrix, List<Integer> list) { //四个点分别为(a1,b1),(a2,b2),(a3,b3),(a4,b4) int a1 = start, b1 = start; int a2 = start, b2 = matrix[0].length - start - 1; int a3 = matrix.length - start - 1, b3 = matrix[0].length - start - 1; int a4 = matrix.length - start - 1, b4 = start; //递归终止 if (a1 > a4) return; if (a1 == a4) { //把最后一行放进去 for (int i = b1; i <= b2; i++) { list.add(matrix[a1][i]); } return; } if (b1 == b2){ //把最后一列放进去 for(int i = a1; i <= a4 ; i++){ list.add(matrix[i][b1]); } return; } for (int i = b1; i < b2; i++) { list.add(matrix[a1][i]); } for (int i = a2; i < a3; i++) { list.add(matrix[i][b2]); } for (int i = b3; i > b4; i--) { list.add(matrix[a3][i]); } for (int i = a4; i > a1; i--) { list.add(matrix[i][b4]); } __spiralOrder(++start, matrix, list); }