[LeetCode]59 螺旋矩阵II

题目描述

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

示例:

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

代码

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
class Solution:
def generateMatrix(self, n):
"""
:type n: int
:rtype: List[List[int]]
"""
return_matrix = [[0]*n for x in range(n)]
left_top = [0, 0]
left_bottom = [n-1, 0]
right_top = [0, n-1]
right_bottom = [n-1, n-1]
iter_num = 0
in_list = list(range(1, n**2+1))

while in_list:
if iter_num is 0:
for idx in range(left_top[1], right_top[1]+1):
return_matrix[left_top[0]][idx] = in_list.pop(0)
left_top[0] += 1
right_top[0] += 1
elif iter_num is 1:
for idx in range(right_top[0], right_bottom[0]+1):
return_matrix[idx][right_top[1]] = in_list.pop(0)
right_top[1] -= 1
right_bottom[1] -= 1
elif iter_num is 2:
for idx in range(right_bottom[1], left_bottom[1]-1, -1):
return_matrix[right_bottom[0]][idx] = in_list.pop(0)
right_bottom[0] -= 1
left_bottom[0] -= 1
else:
for idx in range(left_bottom[0], left_top[0]-1, -1):
return_matrix[idx][left_top[1]] = in_list.pop(0)
left_bottom[1] += 1
left_top[1] += 1
iter_num = (iter_num+1) % 4
return return_matrix