当前位置: 首页 > news >正文

【中等】59.螺旋矩阵Ⅱ

题目描述

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

示例 1:

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

示例 2:

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

提示:

1 <= n <= 20

解题方法

详细地解题方法看视频代码随想录

模拟顺时针画矩阵的过程:

  • 填充上行从左到右
  • 填充右列从上到下
  • 填充下行从右到左
  • 填充左列从下到上

由外向内一圈一圈这么画下去。
在这里插入图片描述
这里每一种颜色,代表一条边,我们遍历的长度,可以看出每一个拐角处的处理规则,拐角处让给新的一条边来继续画。

这也是坚持了每条边左闭右开的原则。每一步都坚持这个规则。

代码如下:

class Solution {
public:
    vector<vector<int>> generateMatrix(int n) {
        vector<vector<int>> res(n, vector<int>(n, 0));  //使用vector定义一个二维数组
        int startx = 0, starty = 0; //定义每个圈的起始位置
        int loop = n / 2;   // 每个圈循环的次数,男,则loop=1只循环一圈
        int mid = n / 2;    // 矩阵的中间位置,n=3,中间位置为(1,1)
        int count = 1;     // 给矩阵中每个空格赋值
        int offset = 1;     // 控制每个边需要收缩的长度
        int i,j;
        while(loop--)
        {
            i = startx;
            j = starty;

            // 开始模拟四个for 就是模拟转了一圈
            // 填充上行从左到右(左闭右开)
            for(j; j < n - offset; j++)
            {
                res[i][j] = count++;
            }

            // 填充右列从上到下(左闭右开)
            for(i; i < n - offset; i++)
            {
                res[i][j] = count++;
            }

            // 填充下行从右到左(左闭右开)
            for( ; j > starty; j--)
            {
                res[i][j] = count++;
            }

            // 填充左列从下到上(左闭右开)
            for( ; i > startx; i--)
            {
                res[i][j] = count++;
            }

            // 第二圈开始,起始位置各加1
            startx++;
            starty++;

            // offset控制每一边的长度
            offset++;
        }

        // 如果n为奇数,要单独给中间位置赋值
        if(n % 2)
        {
            res[mid][mid] = count;
        }
        return res;
    }
};

时间复杂度 O(n^2): 模拟遍历二维矩阵的时间
空间复杂度 O(1)

相关文章:

  • DeepSeek个人知识库
  • vscode设置自动换行
  • pnpm的基本用法
  • 【设计师专属】智能屏幕取色器Pro|RGB/HEX双模式|快捷键秒存|支持导出文档|C++ QT
  • vue3的实用工具库@vueuse/core
  • 【Unity】URP管线Shader编程实例详解 (1) : 漩涡效果shader
  • 10道Redis常见面试题速通
  • 网卡与网口全解析:从基础到Linux高级管理
  • 基于GO语言的车牌识别api技术-港澳车牌文字识别
  • 【JavaScript Day23】jQuery事件绑定及动画
  • 深度学习进阶:构建多层神经网络
  • 从零开始:在 MacOS 中通过 Docker 部署跨平台 Redis 服务(支持 Ubuntu 迁移)
  • 基于Redis 的分布式 session 图解
  • 计算重建dMRI与GrondTruth之间的角度误差图(AAE)代码实现(pytorch)
  • Java 网络协议面试题答案整理,最新面试题
  • B站pwn教程笔记-3
  • 记录锁,间隙锁,Next-Key Lock
  • 2025数学建模竞赛汇总,错过再等一年
  • 2025-02-25 学习记录--C/C++-用C语言实现删除字符串中的子串
  • ollama无法通过IP:11434访问
  • 中国船舶:手持订单已排期至2029年,吸收合并中国重工正在推进中
  • 以安全部门确认哈马斯加沙地带军事部门领导人被打死
  • 丹泽尔·华盛顿惊喜收获戛纳终身成就奖
  • A股高开高走:宠物经济走强,超3800股收涨,两市成交超1.1万亿元
  • 济南一医院救护车未执行紧急任务时违规鸣笛
  • “十五五”规划编制工作开展网络征求意见活动