C++实现螺旋矩阵II的算法解析与优化
1. 螺旋矩阵II问题解析最近在力扣刷题时遇到了经典的螺旋矩阵II问题编号59这道题看似简单但实现起来有不少细节需要注意。题目要求给定一个正整数n生成一个包含1到n²所有元素的n×n正方形矩阵且这些元素按照顺时针螺旋顺序排列。作为C选手我花了些时间研究这个问题发现核心在于控制好边界条件和遍历方向。下面分享我的解题思路和实现过程希望能帮助同样在刷题的朋友们少走弯路。2. 解题思路分析2.1 问题分解螺旋矩阵的生成可以分解为四个方向的循环填充从左到右填充上行从上到下填充右列从右到左填充下行从下到上填充左列每个循环完成后对应的边界会向内收缩一层。这个过程需要持续到所有元素填充完毕。2.2 边界条件处理关键是要处理好四个边界左边界(left)右边界(right)上边界(top)下边界(bottom)每次完成一个方向的填充后对应的边界需要调整。例如完成从左到右的填充后上边界top需要加1。3. C实现详解3.1 初始化矩阵首先需要初始化一个n×n的二维vectorvectorvectorint generateMatrix(int n) { vectorvectorint matrix(n, vectorint(n)); // 后续代码... }3.2 主循环实现使用while循环控制整体流程直到填充完所有数字int num 1; int left 0, right n - 1; int top 0, bottom n - 1; while (left right top bottom) { // 四个方向的填充代码... }3.3 四个方向填充细节3.3.1 从左到右填充上行for (int i left; i right; i) { matrix[top][i] num; } top;3.3.2 从上到下填充右列for (int i top; i bottom; i) { matrix[i][right] num; } right--;3.3.3 从右到左填充下行for (int i right; i left; i--) { matrix[bottom][i] num; } bottom--;3.3.4 从下到上填充左列for (int i bottom; i top; i--) { matrix[i][left] num; } left;4. 完整代码实现将上述部分组合起来完整的解决方案如下vectorvectorint generateMatrix(int n) { vectorvectorint matrix(n, vectorint(n)); int num 1; int left 0, right n - 1; int top 0, bottom n - 1; while (left right top bottom) { // 从左到右 for (int i left; i right; i) { matrix[top][i] num; } top; // 从上到下 for (int i top; i bottom; i) { matrix[i][right] num; } right--; // 从右到左 for (int i right; i left; i--) { matrix[bottom][i] num; } bottom--; // 从下到上 for (int i bottom; i top; i--) { matrix[i][left] num; } left; } return matrix; }5. 复杂度分析5.1 时间复杂度由于我们需要填充n²个元素每个元素只被访问一次因此时间复杂度为O(n²)。5.2 空间复杂度除了返回的矩阵外我们只使用了常数个额外变量因此空间复杂度为O(1)不考虑返回矩阵的空间。6. 边界情况处理6.1 n1的情况当n1时矩阵只有一个元素[[1]]我们的代码也能正确处理这种情况。6.2 奇数和偶数n无论n是奇数还是偶数代码都能正确处理。对于奇数n中心点会在最后被填充对于偶数n所有层都能完整填充。7. 调试技巧7.1 打印中间结果在开发过程中可以在每个方向填充后打印当前矩阵状态方便调试void printMatrix(const vectorvectorint matrix) { for (const auto row : matrix) { for (int num : row) { cout num \t; } cout endl; } cout ----------------- endl; }7.2 边界值测试建议测试以下情况n1n2n3n4 确保各种边界情况都能正确处理。8. 常见错误与修正8.1 边界条件错误常见错误是边界条件处理不当导致重复填充或漏填。例如忘记更新边界(top, right--等)循环条件错误(使用而不是)8.2 索引越界在从右到左和从下到上填充时要特别注意索引不要越界。确保右边界right不小于左边界left下边界bottom不小于上边界top9. 优化思路9.1 减少循环次数可以观察到当left right时只需要填充垂直方向当top bottom时只需要填充水平方向。可以添加特殊处理if (left right) { for (int i top; i bottom; i) { matrix[i][left] num; } break; } if (top bottom) { for (int i left; i right; i) { matrix[top][i] num; } break; }9.2 预分配内存虽然vector会自动管理内存但对于大n值预先分配好内存可能有一定性能提升matrix.reserve(n); for (auto row : matrix) { row.reserve(n); }10. 类似题目推荐掌握了螺旋矩阵II后可以尝试以下类似题目螺旋矩阵I编号54给定矩阵按螺旋顺序读取旋转图像编号48顺时针旋转图像90度对角线遍历编号498按对角线顺序遍历矩阵11. 个人心得在实际编码过程中我发现画出矩阵的示意图对理解很有帮助。可以用纸笔画出n3、n4的情况标出填充顺序和边界变化。这样能更直观地理解算法流程。另一个技巧是使用一致的变量命名。我选择left/right/top/bottom这种直观的命名而不是更短的l/r/t/b虽然代码稍长但可读性更好。最后边界条件的处理是这类问题的关键。建议先处理一般情况再仔细考虑各种边界情况确保代码的健壮性。

相关新闻

大模型API成本优化实战:动态路由与智能降级方案

大模型API成本优化实战:动态路由与智能降级方案

1. 项目背景与核心挑战去年底我们团队接了个大活,需要同时对接7个不同的大模型API完成多模态内容生成。最初简单粗暴地全量调用最高配版本,结果第一个月账单直接飙到3800元。作为技术负责人,我花了三周时间重构整套调用策略,最终把…

2026/8/21 19:20:31 阅读更多 →
Obsidian到Notion同步终极指南:实现双向数据迁移的完整解决方案

Obsidian到Notion同步终极指南:实现双向数据迁移的完整解决方案

Obsidian到Notion同步终极指南:实现双向数据迁移的完整解决方案 【免费下载链接】obsidian-to-notion Share obsidian markdown file to notion and generate notion share link 同步obsdian文件到notion,并生成notion分享链接,可以方便的分享…

2026/8/13 21:58:02 阅读更多 →
零门槛上手Ryujinx:在PC上体验4100+款Switch游戏的完整指南

零门槛上手Ryujinx:在PC上体验4100+款Switch游戏的完整指南

零门槛上手Ryujinx:在PC上体验4100款Switch游戏的完整指南 【免费下载链接】Ryujinx 用 C# 编写的实验性 Nintendo Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/ry/Ryujinx 你是否曾经梦想过在电脑上畅玩《塞尔达传说:旷野之息…

2026/8/19 18:13:40 阅读更多 →

最新新闻

gRPC 错误处理入门第一课:用 grpc-errors 快速搞懂 9 大语言的报错与捕获

gRPC 错误处理入门第一课:用 grpc-errors 快速搞懂 9 大语言的报错与捕获

gRPC 错误处理入门第一课:用 grpc-errors 快速搞懂 9 大语言的报错与捕获 【免费下载链接】grpc-errors A handy guide to gRPC errors 项目地址: https://gitcode.com/gh_mirrors/gr/grpc-errors 学习 gRPC 错误处理时,新手最大的困惑就是不同语…

2026/8/22 14:44:07 阅读更多 →
Git XL 支持哪些 Excel 格式?xls/xlsx/xlsm/xlsb 等 9 种类型全面解析

Git XL 支持哪些 Excel 格式?xls/xlsx/xlsm/xlsb 等 9 种类型全面解析

Git XL 支持哪些 Excel 格式?xls/xlsx/xlsm/xlsb 等 9 种类型全面解析 【免费下载链接】git-xl Git extension: Makes git-diff work for VBA in Excel workbooks (xls* file types) 项目地址: https://gitcode.com/gh_mirrors/gi/git-xl Git XL 是一个开源的…

2026/8/22 14:44:07 阅读更多 →
Normy乐观更新实战:用optimisticData与rollbackData实现UI即时响应和自动回滚

Normy乐观更新实战:用optimisticData与rollbackData实现UI即时响应和自动回滚

Normy乐观更新实战:用optimisticData与rollbackData实现UI即时响应和自动回滚 【免费下载链接】normy Automatic normalization and data updates for data fetching libraries (react-query, vue-query, trpc, swr, rtk-query and more) 项目地址: https://gitco…

2026/8/22 14:44:07 阅读更多 →
ComfyUI 节点工作流怎么用:从0到跑通第一个图生视频的5个步骤

ComfyUI 节点工作流怎么用:从0到跑通第一个图生视频的5个步骤

ComfyUI 节点工作流怎么用:从0到跑通第一个图生视频的5个步骤 【免费下载链接】ComfyUI The most powerful and modular diffusion model GUI, api and backend with a graph/nodes interface. 项目地址: https://gitcode.com/GitHub_Trending/co/ComfyUI 很…

2026/8/22 14:44:07 阅读更多 →
英语考试作文

英语考试作文

这里写自定义目录标题英文原文与中文逐句对应翻译英语作文核心高频单词中英对照表英文原文与中文逐句对应翻译 英文原文中文翻译Dear Jason,亲爱的贾森:I am a high school student and now I am going to take the College Entrance Examination.我是一名高中生&a…

2026/8/22 14:44:07 阅读更多 →
substitute_hook_functions实战教程:完整API详解与全部13个错误码速查清单

substitute_hook_functions实战教程:完整API详解与全部13个错误码速查清单

substitute_hook_functions实战教程:完整API详解与全部13个错误码速查清单 【免费下载链接】substitute A free runtime modification library. 项目地址: https://gitcode.com/gh_mirrors/su/substitute substitute 是一款免费的运行时修改(runt…

2026/8/22 14:43:07 阅读更多 →

日新闻

沉金PCB工艺实战指南:从设计到SMT焊接的可靠性保障

沉金PCB工艺实战指南:从设计到SMT焊接的可靠性保障

在电子硬件开发领域,PCB(印制电路板)的沉金工艺是提升产品可靠性和焊接质量的关键环节。对于需要高密度互连、长期稳定运行或高频信号传输的板卡,如“黍姐仿通行证”这类可能涉及身份识别、数据交互的硬件项目,选择正确…

2026/8/22 0:00:11 阅读更多 →
电气考研电路八月强化四步法:从知识体系到真题实战的闭环攻略

电气考研电路八月强化四步法:从知识体系到真题实战的闭环攻略

这次我们来看一个针对电气考研电路科目的学习规划项目。它不是软件工具,而是一套聚焦于8月份关键节点的备考策略。对于电气工程考研的同学来说,电路分析是专业课的重中之重,也是拉开分差的关键。进入8月,复习进入强化阶段&#xf…

2026/8/22 0:00:11 阅读更多 →
消除AI代码的“AI味”:Claude Code设计优化技能配置与实战指南

消除AI代码的“AI味”:Claude Code设计优化技能配置与实战指南

大家好,我是专注于前端开发与AI工具实践的技术博主。在日常使用 Claude Code 等AI编程助手时,你是否也遇到过这样的困扰:生成的代码功能上没问题,但代码风格、组件设计、交互逻辑总透着一股“AI味”——布局单调、样式简陋、交互生…

2026/8/22 0:00:11 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/21 3:21:33 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/22 8:09:09 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/21 6:07:56 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/21 16:42:28 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/22 7:31:03 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/22 3:22:48 阅读更多 →