59. 螺旋矩阵II

leetcode-59. 螺旋矩阵II

以n=3为例,此矩阵共赋值9次,移动8次,沿4个方向移动,问题的关键在于如何把这些操作不重不漏地分类完成。

下一步要思考的是,根据n的不同,如何把这些操作分配到不同的轮次内,一个可行的办法是转一圈,算作一个轮次。

一个轮次内有4个方向,由此可知,至少要写4个循环才能完成目标,同一方向的操作,写在一个循环内。

最后,在完成一圈后,移动到下一圈开始的位置,即可完成循环。

实例
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
29
30
31
32
33
34
35
36
37
38
39
40
41
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
vector<vector<int>> result(n,vector(n,0));
int i = 1, x = 0, y = 0, loop = n; //loop为轮次的长度
while (loop > 0)
{
for(int step = 0; step < loop -1; step++)
{
result[x][y] = i;
y++;
i++;
}
for(int step = 0; step < loop - 1; step++)
{
result[x][y] = i;
x++;
i++;
}
for(int step = 0; step < loop - 1; step++)
{
result[x][y] = i;
y--;
i++;
}
for(int step = 0; step < loop - 2; step++)
{
result[x][y] = i;
x--;
i++;
}
//四次循环,对应四个方向的移动
result[x][y] = i;
y++;
i++;
//把位置重置到下一轮的起始点
loop -= 2;
}
return result;
}
};