螺旋矩阵 II

给你一个正整数 n ,生成一个包含 1n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix

示例 1:

https://assets.leetcode.com/uploads/2020/11/13/spiraln.jpg

1
2
输入:n = 3
输出:[[1,2,3],[8,9,4],[7,6,5]]

示例 2:

1
2
输入:n = 1
输出:[[1]]

提示:

  • 1 <= n <= 20

经典模拟题。做过好多遍了,每次写都忘。

定义两个数组,模拟移动方向

1
2
3
4
5
int[] dx = {0,1,0,-1};
int[] dy = {1,0,-1,0};
int d = 0;
//d从0到3分别代表向右下上左四个方向移动
//改变方向的条件是撞墙或者已经填好数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Solution {
public int[][] generateMatrix(int n) {
int[] dx = {0,1,0,-1};
int[] dy = {1,0,-1,0};
int [][] matrix = new int[n][n];
int x=0,y=0,d=0;
for(int i=1;i<=n*n;i++){
matrix[x][y]=i;
int next_x=x+dx[d];
int next_y=y+dy[d];
if(next_x<0||next_x>=n||next_y<0||next_y>=n||matrix[next_x][next_y]!=0){
d=(d+1)%4;
next_x=x+dx[d];
next_y=y+dy[d];
}
x=next_x;
y=next_y;
}
return matrix;
}
}