力扣第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);
}
