【算法刷题日记】LeetCode 59. 螺旋矩阵 II|经典边界模拟法(C 语言实现)

张开发
2026/4/17 1:11:33 15 分钟阅读

分享文章

【算法刷题日记】LeetCode 59. 螺旋矩阵 II|经典边界模拟法(C 语言实现)
刷题日期2026 年4 月 16 日题目59. 螺旋矩阵 II难度中等编程语言C 语言今日学习参考文章讲解链接https://blog.csdn.net/qq_45931968/article/details/129708503视频讲解链接https://www.bilibili.com/video/BV1SL4y1N7mV/一、看到题目的第一想法题目要求给定一个正整数n生成一个包含1 ~ n²所有元素且元素按顺时针螺旋排列的n x n正方形矩阵。拿到题目第一反应这是一道纯模拟类题目不需要复杂数学公式核心是顺时针转圈填数必须控制好填充边界不然很容易数组越界思路定义上下左右四个边界按照左→右 → 上→下 → 右→左 → 下→上的顺序循环填充每填充完一条边就收缩对应边界边界交叉就停止。二、题目分析输入一个正整数n输出顺时针螺旋排列的n×n二维矩阵填充规则从 1 开始顺时针转圈直到n²关键点边界控制、及时退出、避免越界数据范围1 n 20数据量小模拟法完全适用三、解题思路四边界法定义四个边界变量left左边界初始为0right右边界初始为n-1top上边界初始为0bottom下边界初始为n-1按固定方向循环填充数字每填充完一条边立刻收缩对应边界收缩后判断边界是否越界越界直接退出循环填充数字从1开始自增到n²四、AC 代码C 语言c运行/** * Return an array of arrays of size *returnSize. * Note: The returned array must be malloced, assume caller calls free(). */ int** generateMatrix(int n, int* returnSize, int** returnColumnSizes) { *returnSize n; *returnColumnSizes (int*)malloc(n * sizeof(int)); // 申请二维数组空间 int** matrix (int**)malloc(n * sizeof(int*)); for (int i 0; i n; i) { matrix[i] (int*)malloc(n * sizeof(int)); (*returnColumnSizes)[i] n; } // 初始化四个边界 int left 0, right n - 1; int top 0, bottom n - 1; int num 1; // 要填充的数字 while (1) { // 1. 左 → 右 for (int i left; i right; i) matrix[top][i] num; if (top bottom) break; // 上边界下移越界则退出 // 2. 上 → 下 for (int i top; i bottom; i) matrix[i][right] num; if (--right left) break; // 右边界左移越界则退出 // 3. 右 → 左 for (int i right; i left; i--) matrix[bottom][i] num; if (--bottom top) break; // 下边界上移越界则退出 // 4. 下 → 上 for (int i bottom; i top; i--) matrix[i][left] num; if (left right) break; // 左边界右移越界则退出 } return matrix; }四、代码实现过程中遇到的困难heap-buffer-overflow 数组越界最开始没有每条边结束后判断边界导致数字填满后还在继续填充访问到非法内存。✅ 解决每条边填充完立刻收缩边界并判断越界越界直接break。边界移动逻辑混乱一开始分不清什么时候移动top/bottom/left/right。✅ 解决严格按照 “填完一条边立刻收缩这条边的边界”。C 语言二维数组动态申请不熟练不清楚returnSize和returnColumnSizes的作用。✅ 解决固定写法记住即可returnSize返回行数returnColumnSizes返回每行列数。循环退出条件不好控制用while(num max)容易出错。✅ 解决改用while(1) 边界判断break逻辑更清晰、更安全。五、今日收获与心得掌握螺旋矩阵核心解法四边界模拟法这是最经典、最通用的模板适用于所有螺旋矩阵、螺旋遍历类题目。数组题目一定要重视越界问题越界是刷题最常见的错误每一步操作都要保证下标在合法范围内。模拟类题目思路要清晰方向顺序固定左→右 → 上→下 → 右→左 → 下→上记住顺序基本不会错。C 语言动态内存分配更加熟练学会了在 LeetCode 中正确返回二维数组理解了返回值参数的作用。刷题积累数组题型总结有序查找 → 二分查找原地移除 → 快慢指针连续子数组 → 滑动窗口螺旋填充 → 四边界模拟六、总结LeetCode 59 螺旋矩阵 II 是数组模拟的经典入门题代码简洁、逻辑清晰非常适合练习边界控制。只要掌握四边界 方向顺序 及时 break就能轻松 AC坚持每日一题稳步提升算法能力

更多文章