59.螺旋矩阵II——学习笔记

题目:给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。

示例 1
img

输入:n = 3
输出:[[1,2,3],[8,9,4],[7,6,5]]

示例 2

输入:n = 1
输出:[[1]]

提示

  • 1 <= n <= 20

题目来源:力扣(LeetCode)链接

解题思路
img

题解

class Solution {
    public int[][] generateMatrix(int n) {
        int[][] res = new int[n][n];//定义一个二维数组用来存放结果
        int count = 1;//放在数组里面的值1~n*n
        int loop = n / 2;//loop表示循环的圈数
        int offset = 1;//每次循环,每条边要走的步数n-offset
        int mid = n / 2;//n为奇数时的中间索引
        int start = 0;//每一圈循环开始的起始位置startX=startY
        int i,j;//数组的行列索引
        while (loop > 0) {
            i = start;
            j = start;
            //填充上行从左到右(左闭右开)
            for(; j < n - offset; j++) {
                res[i][j] = count;
                count++;
            }
            //填充右列从上到下(左闭右开),j=n-offset
            for(; i < n - offset; i++) {
                res[i][j] = count;
                count++;
            }
            //填充下行从右到左(左闭右开),i=n-offset,j=n-offset
            for(; j > start; j--) {
                res[i][j] = count;
                count++;
            }
            ////填充左列从下到上(左闭右开),i=n-offset
            for(; i > start; i--) {
                res[i][j] = count;
                count++;
            }
            //每一圈循环结束后,要更新起始位置
            start++;
            //每缩小一圈,步长也要缩小一步
            offset++;
            //每循环一圈,总的圈数就减1
            loop--;
        }
        //如果n为奇数,则需要单独处理中间位置
        if (n % 2 == 1) {
            res[mid][mid] = n * n;
        }
        //返回结果
        return res;
    }
}
posted @   会飞的笨笨  阅读(78)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!
点击右上角即可分享
微信分享提示