题解 | #螺旋矩阵#

螺旋矩阵

http://www.nowcoder.com/practice/7edf70f2d29c4b599693dc3aaeea1d31

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);
     }
    

}

全部评论
好理解
点赞
送花
回复
分享
发布于 2022-02-26 16:40

相关推荐

OPSL:钱确实给的多,但是追责这一点比较迷惑…3个月具体如何计算呢?出勤天数30*3吗?还是21*3呢?万一中间学校有安排怎么办呢?这个得多问一问呀
点赞 评论 收藏
转发
11 1 评论
分享
牛客网
牛客企业服务