0%

代码随想录第五天

数组-螺旋矩阵

题目链接

这道题刚刚看到的时候很纳闷,一脸的什么玩意,仔细理清楚思路和规律以及限制就知道了

​ 生成一个 n×n 空矩阵 matrix,随后模拟整个向内环绕的填入过程:定义当前左右上下边界 left,right,above,below,初始值 num = 1,迭代终止值 tar = n * n;当 num <= tar 时,始终按照 从左到右 从上到下 从右到左 从下到上 填入顺序循环,每次填入后:执行 num += 1:得到下一个需要填入的数字;
​ 更新边界:例如从左到右填完后,上边界 t += 1,相当于上边界向内缩 1。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
vector< vector<int>> matrix(n, vector<int>(n, 0));
int left = 0;
int right = n-1;
int above = 0;
int below = n-1;
int tar = n*n;
int num = 1;
while(num <= tar){
for(int i = left; i <= right; i++)
matrix[above][i] = num++;
above++;
for(int i = above; i <= below; i++)
matrix[i][right] = num++;
right--;
for(int i = right; i >= left; i--)
matrix[below][i] = num++;
below--;
for(int i = below; i >= above; i--)
matrix[i][left] = num++;
left++;

}
return matrix;
}
};