59. 螺旋矩阵 II

leetcode链接:
https://leetcode.cn/problems/spiral-matrix-ii/description/

方案一

定义边界与方向

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
42
43
44
45
46
47
48
49
50
int[][] result = new int[n][n];

int edge = 0, // 执行坐标的前进方向: 0 --> 向右,1 --> 向下,2 --> 向左,3 --> 向上
up = 1, // 边界,坐标的上边界
down = n - 1, // 边界,坐标的下边界
left = 0, // 边界,坐标的左边界
right = n -1, // 边界,坐标的右边界
x = 0, // 坐标的x轴位置
y = -1; // 坐标的y轴位置

for (int i = 1; i <= n * n; i++) {
switch (edge) {
case 0:
if (++y > right) {
y--;
edge++;
x++;
right--;
}
break;
case 1:
if (++x > down) {
x--;
edge++;
y--;
down--;
}
break;
case 2:
if (--y < left) {
y++;
edge++;
x--;
left++;
}
break;
case 3:
if (--x < up) {
x++;
edge = 0;
y++;
up++;
}
break;

}
result[x][y] = i;
}

return result;

结果

  • 20/20 cases passed (0 ms)
  • Your runtime beats 100 % of java submissions
  • Your memory usage beats 12.39 % of java submissions (39.8 MB)

分析

时间复杂度:
O( n² )

空间复杂度:
O( 1 )

较优方案

通过for循环判断的形式,减少对if函数的使用。

https://leetcode.cn/problems/spiral-matrix-ii/solution/spiral-matrix-ii-mo-ni-fa-she-ding-bian-jie-qing-x/

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Solution {
public int[][] generateMatrix(int n) {
int l = 0, r = n - 1, t = 0, b = n - 1;
int[][] mat = new int[n][n];
int num = 1, tar = n * n;
while(num <= tar){
for(int i = l; i <= r; i++) mat[t][i] = num++; // left to right.
t++;
for(int i = t; i <= b; i++) mat[i][r] = num++; // top to bottom.
r--;
for(int i = r; i >= l; i--) mat[b][i] = num++; // right to left.
b--;
for(int i = b; i >= t; i--) mat[i][l] = num++; // bottom to top.
l++;
}
return mat;
}
}

作者:jyd
链接:https://leetcode.cn/problems/spiral-matrix-ii/solution/spiral-matrix-ii-mo-ni-fa-she-ding-bian-jie-qing-x/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

59. 螺旋矩阵 II
http://yuanql.top/2023/04/13/02_leetcode/59. 螺旋矩阵 II/
作者
Qingli Yuan
发布于
2023年4月13日
许可协议