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

力扣:《螺旋矩阵》系列题目

今天做了一下螺旋矩阵主题的一系列题目

力扣中的相似题目

还是有所感悟的

接下来一一回顾:

第一题:

59. 螺旋矩阵 II - 力扣(LeetCode)

这题让我们生成一个正方形的矩阵,注意是正方形,不是长方形,所以这里我可以while循环里用计数的方法,cnt计数器累加填数直到和n*n相等

边界问题就是left right up down 还是非常常规简单的

代码如下:

class Solution {
public:vector<vector<int>> generateMatrix(int n) {vector<vector<int>> vec(n,vector<int> (n) );int left=0,right=n-1,up=0,down=n-1;int cnt=1;while(cnt<=n*n){for(int i=left;i<=right;i++){vec[up][i]=cnt++;}up++;for(int j=up;j<=down;j++){vec[j][right]=cnt++;}right--;for(int i=right;i>=left;i--){vec[down][i]=cnt++;}down--;for(int j=down;j>=up;j--){vec[j][left]=cnt++;}left++;}return vec;}
};

当然了你这里vector的二维数组要会定义:vector<vector<int>> vec(10,vector<int>(10))

接下去第二题:

54. 螺旋矩阵 - 力扣(LeetCode)

这题其实和第一题一模一样 换汤不换药

但是值得注意的是 第二题这里 不是固定的正方形了  可以是任意的矩形 也就是说长方形也行

这样的话我们就不能再用计数法来表示终止条件 因为有可能会产生边界问题 

所以我们直接多写几个left<=right  up<=down即可 代码如下:


class Solution {
public:vector<int> spiralOrder(vector<vector<int>>& matrix) {int m=matrix.size(),n=matrix[0].size();//m行n列vector<int> res;int left=0,up=0,right=n-1,down=m-1;while(left<=right&&up<=down)//矩形为非正方形的时候有可能造成边界问题{if(up<=down)for(int i=left;i<=right;i++){res.push_back(matrix[up][i]);}up++;if(right>=left)for(int j=up;j<=down;j++){res.push_back(matrix[j][right]);}right--;if(down>=up)for(int i=right;i>=left;i--){res.push_back(matrix[down][i]);}down--;if(left<=right)for(int j=down;j>=up;j--){res.push_back(matrix[j][left]);}left++;}return res;}
};

第三题:

885. 螺旋矩阵 III - 力扣(LeetCode)

这道题目有几个要素:

        要素1:每次东南西北走的顺序,每次的步长是不一样的,我现在模拟开始,往东走1往南走1往西走2往北走2往东走3往西走3……也就是说 每走两步 步长+1

        要素2:这里未来方便走路 可以写方向数组 

每次一个for循环 step表示步长 就是在这个方向走多少次 

如果当前点没有越界 就放入结果数组即可

我定义一个方向0123表示东西南北 以及下标访问方向数组 当我方向为1或者3的时候  step就可以++

然后方向+1再%4就是新的方向

代码如下:

class Solution {
public:vector<vector<int>> spiralMatrixIII(int rows, int cols, int rStart, int cStart) {//螺旋形状从里到外的话 定义方向数组 东南西北的顺序 每走两步 步长+1//终止条件:结果数组的长度等于实际要求的长度就行int dx[]={0,1,0,-1};  int dy[]={1,0,-1,0};int step=1,cnt=0,d=0;//d是方向的意思vector<vector<int>> res;int curx=rStart,cury=cStart;res.push_back({rStart,cStart});cnt++;if(cnt==rows*cols)return res;while(1){for(int i=0;i<step;i++)//每个方向要走的步数{curx+=dx[d];cury+=dy[d];if(curx>=0&&curx<=rows-1&&cury>=0&&cury<=cols-1){res.push_back({curx,cury});cnt++;}if(cnt==rows*cols)return res;}if(d==1||d==3)step++;d=(d+1)%4;}}
};

第四题:

2326. 螺旋矩阵 IV - 力扣(LeetCode)
这一题实际上也不是特别难  

有一个小妙招:初始化结果列表的时候 直接-1填满就行 这样最后不够也能结束

那么结束条件是什么呢?head为空或者越界

所以while里面就left<=right&&up<=down&&head即可

需要注意的是初始化-1vector的写法:vector<vector<int>> vec(10,vector<int>(10,-1))

代码如下:

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:vector<vector<int>> spiralMatrix(int m, int n, ListNode* head) {int left = 0, right = n - 1, up = 0, down = m - 1;vector<vector<int>> res(m, vector<int>(n, -1));while (left <= right && up <= down && head) {if (up <= down && head) {for (int i = left; i <= right && head; i++) {res[up][i] = head->val;head = head->next;}up++;}if (left <= right && head) {for (int j = up; j <= down && head; j++) {res[j][right] = head->val;head = head->next;}right--;}if (up <= down && head) {for (int i = right; i >= left && head; i--) {res[down][i] = head->val;head = head->next;}down--;}if (left <= right && head) {for (int j = down; j >= up && head; j--) {res[j][left] = head->val;head = head->next;}left++;}}return res;}
};

以上就是《螺旋矩阵》家族的所有成员 连座!

这就是本期所有内容了 下期再见 rich!

相关文章:

力扣:《螺旋矩阵》系列题目

今天做了一下螺旋矩阵主题的一系列题目 即力扣中的相似题目 还是有所感悟的 接下来一一回顾&#xff1a; 第一题&#xff1a; 59. 螺旋矩阵 II - 力扣&#xff08;LeetCode&#xff09; 这题让我们生成一个正方形的矩阵&#xff0c;注意是正方形&#xff0c;不是长方形&a…...

发电厂进阶,modbus TCP转ethernet ip网关如何赋能能源行业

案例分享&#xff1a;稳联技术modbus TCP转ethernet ip网关wl-abc004赋能&#xff0c;发电厂自动化改造&#xff0c;推动能源行业智能化升级 随着全球能源结构转型和“双碳”目标的推进&#xff0c;传统发电厂&#xff08;如火电、水电、生物质发电&#xff09;正面临严峻挑战&…...

深入了解linux系统—— 操作系统的路径缓冲与链接机制

前言 在之前学习当中&#xff0c;我们了解了被打开的文件是如何管理的&#xff1b;磁盘&#xff0c;以及ext2文件系统是如何存储文件的。 那我们要打开一个文件&#xff0c;首先要先找到这个文件&#xff0c;操作系统又是如何去查找的呢&#xff1f; 理解操作系统搜索文件 …...

Ansible快速入门指南

Ansible 是一款基于 Python 开发的开源自动化运维工具&#xff0c;主要用于实现服务器配置管理、应用部署、任务自动化执行等功能。它通过 简单的 YAML 脚本&#xff08;Playbook&#xff09; 定义任务&#xff0c;结合 SSH 协议 对远程主机进行管理&#xff0c;无需在被控节点…...

华为2025年校招笔试真题手撕教程(一)

一、题目 输入&#xff1a; 第一行为记录的版本迭代关系个数N&#xff0c;范围是[1&#xff0c;100000]; 第二行到第N1行&#xff1a;每行包含两个字符串&#xff0c;第一个字符串为当前版本&#xff0c;第二个字符串为前序版本&#xff0c;用空格隔开。字符串包含字符个数为…...

第9.2讲、Tiny Decoder(带 Mask)详解与实战

自己搭建一个 Tiny Decoder&#xff08;带 Mask&#xff09;&#xff0c;参考 Transformer Encoder 的结构&#xff0c;并添加 Masked Multi-Head Self-Attention&#xff0c;它是 Decoder 的核心特征之一。 1. 背景与动机 Transformer 架构已成为自然语言处理&#xff08;NLP…...

postgresql 常用参数配置

#01 - Connection-Authentication 优化点&#xff1a; listen_addresses 0.0.0.0 建议&#xff1a;生产环境应限制为具体IP&#xff08;如 192.168.1.0/24,127.0.0.1&#xff09;&#xff0c;避免暴露到公网。 ssl off 建议&#xff1a;启用SSL&#xff08;ssl on&#xf…...

Python模块中的私有命名与命名空间管理:深入解析与实践指南

文章大纲 引言 在Python开发中,模块是代码组织和复用的重要方式,而私有命名和命名空间管理则是确保代码清晰和避免冲突的关键机制。私有命名通过特定的命名约定限制了模块中某些内容的访问,有效保护了内部实现细节;命名空间管理则帮助开发者理解标识符的作用域和查找规则…...

基于PCRLB的CMIMO雷达网络多目标跟踪资源调度

针对分布式组网CMIMO雷达多目标跟踪(MTT)场景&#xff0c;博客分析了一种目标-雷达匹配方案与功率联合优化算法。在采用分布式组网融合架构的基础上&#xff0c;推导包含波束和功率分配的后验克拉美罗界(PCRLB)。随后&#xff0c;将该效用函数结合CMIMO雷达系统资源&#xff0c…...

AtCoder Beginner Contest 407(ABCDE)

A - Approximation 翻译&#xff1a; 给你一个正整数 A 和一个正奇数 B。 请输出与实数 的差最小的整数。 可以证明&#xff0c;在约束条件下&#xff0c;这样的整数是唯一的。 思路&#xff1a; 令。比较来判断答案。 实现&#xff1a; #include<bits/…...

VILT模型阅读笔记

代码地址&#xff1a;VILT Abstract Vision-and-Language Pre-training (VLP) has improved performance on various joint vision-andlanguage downstream tasks. Current approaches to VLP heavily rely on image feature extraction processes, most of which involve re…...

掌握 npm 核心操作:从安装到管理依赖的完整指南

图为开发者正在终端操作npm命令&#xff0c;图片来源&#xff1a;Unsplash 作为 Node.js 生态的基石&#xff0c;npm&#xff08;Node Package Manager&#xff09;是每位开发者必须精通的工具。每天有超过 1700 万个项目通过 npm 共享代码&#xff0c;其重要性不言而喻。本文…...

OpenCV CUDA模块特征检测与描述------一种基于快速特征点检测和旋转不变的二进制描述符类cv::cuda::ORB

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::cuda::ORB 是 OpenCV 库中 CUDA 模块的一部分&#xff0c;它提供了一种基于快速特征点检测和旋转不变的二进制描述符的方法&#xff0c;用于…...

Awesome ChatGPT Prompts:释放AI对话潜力的开源利器

项目概览 Awesome ChatGPT Prompts 是由土耳其开发者 Fatih Kadir Akın 发起的开源项目,托管于 GitHub,旨在通过精心设计的提示词模板(Prompts)优化用户与 ChatGPT 的交互体验。项目以 Markdown 和 CSV 格式管理模板,无需复杂编程语言,但需文本处理能力,目前已在 GitH…...

Prompt Tuning:轻量级微调与反向传播揭秘

Prompt Tuning 损失函数与反向传播原理解析 在Transformers中,Prompt Tuning是一种轻量级参数高效微调方法,其核心思想是只训练额外添加的提示词向量(prompt embeddings),而冻结预训练模型的主体参数。 损失函数设计 Prompt Tuning的损失函数与标准的语言模型训练类似,主…...

C++ 继承详解:基础篇(含代码示例)

目录 1. 什么是继承&#xff1f; 2. 继承的访问控制 3. 派生类构造与析构 (1) 构造顺序 (2) 析构顺序 4. 函数隐藏&#xff08;Name Hiding&#xff09; 1. 什么是继承&#xff1f; 继承&#xff08;Inheritance&#xff09;是面向对象编程&#xff08;OOP&#xff09;的…...

PP-YOLOE-SOD学习笔记2

一、解析X-Anylabeling标注后的json格式问题 最近在使用自动标注工具后json格式转化过程中&#xff0c;即标注框的四点坐标转换为两点坐标时&#xff0c;发现json格式的四点顺序是按顺时针方向开始的&#xff0c;那么在转换其实就是删除2、4坐标或者1、3坐标即可。 二、数据集…...

OpenLayers 加载测量控件

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 地图控件是一些用来与地图进行简单交互的工具&#xff0c;地图库预先封装好&#xff0c;可以供开发者直接使用。OpenLayers具有大部分常用的控件&#x…...

.NET ORM开发手册:基于SqlSugar的高效数据访问全攻略

SqlSuger是一个国产&#xff0c;开源ORM框架&#xff0c;具有高性能&#xff0c;使用方便&#xff0c;功能全面的特点&#xff0c;支持.NET Framework和.NET Core&#xff0c;支持各种关系型数据库&#xff0c;分布式数据库&#xff0c;时序数据库。 官网地址&#xff1a;SqlS…...

【PostgreSQL】数据探查工具1.0研发可行性方案

👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 想抢先解锁数据自由的宝子,速速戳我!评论区蹲一波 “蹲蹲”,揪人唠唠你的超实用需求! 【PostgreSQL】数据探查工具1.0研发可行性方案,数据调研之秒解析数据结构,告别熬夜写 SQL【PostgreSQL】数据探查工具…...

C++ 内存管理与单例模式剖析

目录 引言 一、堆上唯一对象&#xff1a;HeapOnly类 &#xff08;一&#xff09;设计思路 &#xff08;二&#xff09;代码实现 &#xff08;三&#xff09;使用示例及注意事项 二、栈上唯一对象&#xff1a;StackOnly类 &#xff08;一&#xff09;设计思路 &#xff0…...

算法学习——从零实现循环神经网络

从零实现循环神经网络 一、任务背景二、数据读取与准备1. 词元化2. 构建词表 三、参数初始化与训练1. 参数初始化2. 模型训练 四、预测总结 一、任务背景 对于序列文本来说&#xff0c;如何通过输入的几个词来得到后面的词一直是大家关注的任务之一&#xff0c;即&#xff1a;…...

win10使用nginx做简单负载均衡测试

一、首先安装Nginx&#xff1a; 官网链接&#xff1a;https://nginx.org/en/download.html 下载完成后&#xff0c;在本地文件中解压。 解压完成之后&#xff0c;打开conf --> nginx.config 文件 1、在 http 里面加入以下代码 upstream GY{#Nginx是如何实现负载均衡的&a…...

2025电工杯数学建模B题思路数模AI提示词工程

我发布的智能体链接&#xff1a;数模AI扣子是新一代 AI 大模型智能体开发平台。整合了插件、长短期记忆、工作流、卡片等丰富能力&#xff0c;扣子能帮你低门槛、快速搭建个性化或具备商业价值的智能体&#xff0c;并发布到豆包、飞书等各个平台。https://www.coze.cn/search/n…...

软考软件评测师——软件工程之开发模型与方法

目录 一、核心概念 二、主流模型详解 &#xff08;一&#xff09;经典瀑布模型 &#xff08;二&#xff09;螺旋演进模型 &#xff08;三&#xff09;增量交付模型 &#xff08;四&#xff09;原型验证模型 &#xff08;五&#xff09;敏捷开发实践 三、模型选择指南 四…...

前端表单中 `readOnly` 和 `disabled` 属性的区别

前端表单中 readOnly 和 disabled 属性的区别 定义与适用范围 readOnly 是一种属性&#xff0c;仅适用于 <input> 和 <textarea> 元素。当设置了此属性时&#xff0c;用户无法修改这些元素的内容&#xff0c;但仍能聚焦并选中文本。disabled 则是一个更广泛的属性…...

【日志软件】hoo wintail 的替代

hoo wintail 的替代 主要问题是日志大了以后会卡有时候日志覆盖后&#xff0c;改变了&#xff0c;更新了&#xff0c;hoo wintail可能无法识别需要重新打开。 有很多类似的日志监控软件可以替代。以下是一些推荐的选项&#xff1a; 免费软件 BareTail 轻量级的实时日志查看…...

OceanBase数据库全面指南(基础入门篇)

文章目录 一、OceanBase 简介与安装配置指南1.1 OceanBase 核心特点1.2 架构解析1.3 安装部署实战1.3.1 硬件要求1.3.2 安装步骤详解1.3.3 配置验证二、OceanBase 基础 SQL 语法入门2.1 数据查询(SELECT)2.1.1 基础查询语法2.1.2 实际案例演示2.2 数据操作(INSERT/UPDATE/DE…...

异步处理与事件驱动中的模型调用链设计

异步处理与事件驱动中的模型调用链设计 在现代AI系统中&#xff0c;尤其是在引入了大模型&#xff08;如LLM&#xff09;或多步骤生成流程的业务场景中&#xff0c;传统的同步调用模型已越来越难以应对延迟波动、资源竞争和流程耦合等问题。为了提升系统响应效率、降低调用失败…...

redis配置带验证的主从复制

IP地址主机名192.168.10.161redis161192.168.10.162redis162192.168.10.163redis163 配置主机host161&#xff0c;redis服务连接密码为123456主机host162设置连接host61的redis服务密码 给host161主机的Redis服务设置连接密码&#xff0c;如果从服务器不指定连接密码无法同…...