Leetcode刷题之路——59. 螺旋矩阵 II
本文最后更新于:2021年3月16日 下午
题目描述
给你一个正整数 n
,生成一个包含 1
到 n^2
所有元素,且元素按顺时针顺序螺旋排列的 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) {
if(n == 0) {
return {};
}
vector<vector<int>> ans(n, vector<int>(n));
int up = 0, down = n, left = 0, right = n, num = 1;
while(num <= n*n) {
for(int i = left; i < right; ++i) {
ans[up][i] = num;
++num;
}
++up;
for(int i = up; i < down; ++i) {
ans[i][right - 1] = num;
++num;
}
--right;
for(int i = right - 1; i >= left; --i) {
ans[down - 1][i] = num;
++num;
}
--down;
for(int i = down - 1; i >= up; --i) {
ans[i][left] = num;
++num;
}
++left;
}
return ans;
}
};
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!