算法训练营第四天|59.螺旋矩阵

张开发
2026/4/17 5:59:51 15 分钟阅读

分享文章

算法训练营第四天|59.螺旋矩阵
题目建议 本题关键还是在转圈的逻辑在二分搜索中提到的区间定义在这里又用上了。题目链接https://leetcode.cn/problems/spiral-matrix-ii/视频讲解https://www.bilibili.com/video/BV1SL4y1N7mV/一 我的思路我这一开始完全没思路不知道怎么让数字按螺旋转起来。后来看了教程才明白核心就是一圈一圈填数字每次都按 “右→下→左→上” 的顺序走填完一圈就把边界往里缩一点再填下一圈。我的步骤先定好矩阵的四个边界最上、最下、最左、最右从数字 1 开始按顺序填从左到右填最上面一行填完就把上边界往下挪一格从上到下填最右边一列填完就把右边界往左挪一格从右到左填最下面一行填完就把下边界往上挪一格从下到上填最左边一列填完就把左边界往右挪一格重复上面的步骤直到所有数字都填完。二 代码的实现class Solution { public: vectorvectorint generateMatrix(int n) { vectorvectorint res(n, vectorint(n, 0)) int top 0, bottom n - 1; int left 0, right n - 1; int num 1; while (num n * n) { for (int i left; i right num n * n; i) res[top][i] num; top; for (int i top; i bottom num n * n; i) res[i][right] num; right--; for (int i right; i left num n * n; i--) res[bottom][i] num; bottom--; for (int i bottom; i top num n * n; i) res[i][left] num; left; } return res; } };三 我遇到的困难1 一开始完全不知道怎么控制方向总想着用一堆 if 判断越写越乱。2 边界总是忘更新填完一行没缩边界导致数字重复填到同一个位置。3 写循环的时候一会儿 i 一会儿 i--很容易搞反尤其是从右往左、从下往上的时候。4 数组越界报错后来才知道每个循环里都要加上 num n * n 来控制四 学习总结学会了用边界控制来模拟螺旋过程这样就不用自己写复杂的逻辑了只要按固定顺序填、按规则缩边界就行。虽然写得很慢还一直写错边界但我把模板背下来了以后遇到类似的矩阵题就能直接套用了也算有收获啦

更多文章