【Leetcode】59.螺旋矩阵 II

59.螺旋矩阵 II

题目

给定一个正整数 n,生成一个包含 1 到 n^2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。

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

方法

定义四个索引top、bottom、left、right,分别代表长方形上下左右四条边的索引。

按照从左到右、从上到下、从右到左、从下到上的顺序将数值填入数组,每次填入后更新边界(比如说从左到右填入完之后,更新top为top+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
public int[][] generateMatrix(int n) {
int[][] res = new int[n][n];
int count = 1;
int top = 0, bottom = n - 1, left = 0, right = n - 1;
while(count <= n * n){
for(int i = left; i <= right; i++){
res[top][i] = count++;
}
top++;
for(int i = top; i <= bottom; i++){
res[i][right] = count++;
}
right--;
for(int i = right; i >= left; i--){
res[bottom][i] = count++;
}
bottom--;
for(int i = bottom; i >= top; i--){
res[i][left] = count++;
}
left++;
}
return res;
}