• day5-day6【代码随想录】螺旋矩阵II



    前言

    坚持循环不变量原则。
    模拟顺时针画矩阵的过程:
    填充上行从左到右
    填充右列从上到下
    填充下行从右到左
    填充左列从下到上
    由外向内一圈一圈这么画下去


    一、螺旋矩阵||(力扣59)

    给一个正整数 n ,生成一个包含 1 到 n^2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。
    在这里插入图片描述
    思考:循环转几圈? --n/2 如果n是奇数呢?
    最后需要判断n%2是否等于1,对最后一个位置单独赋值

    class Solution {
        public int[][] generateMatrix(int n) {
            int start=0;
            int offset=1;
            int count =1;
            int[][] res = new int[n][n];
            int i,j;
            int loop=0;//循环次数
            while(loop++<n/2){
                for(j=start;j<n-loop;j++){
                    res[start][j]=count++;
                }
                for(i=start;i<n-loop;i++){
                    res[i][j]=count++;
                }
                for(;j>=loop;j--){
                    res[i][j]=count++;
                }
                for(;i>=loop;i--){
                    res[i][j]=count++;
                }
                start++;
            }
            if(n%2==1){
                res[start][start]=count;
            }
            return res;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    在这里插入图片描述

    二、螺旋矩阵(力扣54)

    给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。
    在这里插入图片描述
    在这里插入图片描述
    按层模拟:
    可以将矩阵看成若干层,首先输出最外层的元素,其次输出次外层的元素,直到输出最内层的元素。
    在这里插入图片描述
    来源:https://leetcode.cn/problems/spiral-matrix/solutions/275393/luo-xuan-ju-zhen-by-leetcode-solution/

    class Solution {
        public List<Integer> spiralOrder(int[][] matrix) {
            List<Integer> arr = new ArrayList<Integer>();
            if(matrix == null){
                return null;
            }
            int m = matrix.length;
            int n = matrix[0].length;
            int left=0;
            int right=n-1;
            int top=0;
            int bootom=m-1;
            int start =0 ;
            int i,j;
            while(left<=right && top<=bootom){
                for(j=left;j<=right;j++){
                    arr.add(matrix[top][j]);
                }
                for(i=top+1;i<=bootom;i++){
                    arr.add(matrix[i][right]);
                }
                if(left<right && top<bootom){
                    for(j=right-1;j>=left;j--){
                        arr.add(matrix[bootom][j]);
                    }
                    for(i=bootom-1;i>top;i--){
                        arr.add(matrix[i][left]);
                    }
                }
                bootom--;
                left++;
                right--;
                top++;
            }
            return arr;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37

    在这里插入图片描述


  • 相关阅读:
    Python 异步编程原理篇之新旧协程实现对比
    linux系统如何安装nginx
    【JMX】JMX远程监控JVM参数配置
    【基础】填涂颜色
    Packet Tracer - 排除多区域 OSPFv2 故障
    centos 里面的service自启动app.jar,出现两个java进程,app是同一个端口
    Java Html转Word
    kubelets 1.20 证书更新
    算法|图论 6 并查集
    centOS7管理开放防火墙端口
  • 原文地址:https://blog.csdn.net/qq_42338744/article/details/128015104