java递归思想(少了很多判断,不容易越界!!)

这个方法很容易懂
方法:

  1. 打印矩阵第一行
  2. 移除矩阵第一行并形成一个新的矩阵
  3. 向左旋转矩阵并形成一个新的矩阵
  4. 回到步骤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);
     }
    

}