java递归思想(少了很多判断,不容易越界!!)
这个方法很容易懂
方法:
- 打印矩阵第一行
- 移除矩阵第一行并形成一个新的矩阵
- 向左旋转矩阵并形成一个新的矩阵
- 回到步骤1
import java.util.*; public class Solution { public ArrayList<Integer> spiralOrder(int[][] matrix) { ArrayList<Integer> list = new ArrayList<Integer>(); if(matrix.length==0) return list; luoXuanMatrix(matrix,list); return list; } //将矩阵向左旋转 public int[][] reverseMatrix(int[][] matrix){ int [][]arr = new int[matrix[0].length][matrix.length]; for(int i = 0;i<matrix.length;i++) { for(int j = 0;j<matrix[i].length;j++) { arr[matrix[i].length-1-j][i]=matrix[i][j]; } } return arr; } public void luoXuanMatrix(int [][]matrix,ArrayList<Integer> list){ //list增加矩阵的第一行 for(int i = 0;i<matrix[0].length;i++) { list.add(matrix[0][i]); } //如果矩阵只有一行就返回递归 if(matrix.length==1) return; //new一个新的矩阵,去掉原来矩阵的第一行 int [][] new_mat = new int[matrix.length-1][matrix[0].length]; for(int i = 1;i<matrix.length;i++) { for(int j = 0;j<matrix[i].length;j++) { new_mat[i-1][j] = matrix[i][j]; } } new_mat = reverseMatrix(new_mat); //调用递归 luoXuanMatrix(new_mat, list); }
}