给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。
示例:
输入: 3
输出:
[
[ 1, 2, 3 ],
[ 8, 9, 4 ],
[ 7, 6, 5 ]
]
题目简单明了,然后我也采用了最简单最笨的办法,按照题意一步步的写入矩阵:
第一次写入第一行,写n次,有可能就结束了,进行判断。
然后写最后一列,写n-1次,只要开始写就不可能在这一行结束。
然后写最后一行,也是n-1次,有可能就结束了,进行判断。
再写左侧第一列,写n-2次,不可能在这一行结束。
按照以上规则进行循环写入,代码如下:
class Solution:
def generateMatrix(self, n):
"""
:type n: int
:rtype: List[List[int]]
"""
res = [[0] * n for _ in range(n)] # 先将list写好放在这
num = 1 # 写入的数值
row = 0 # 开始行
lie = -1 # 开始列,因为我代码中先更换位置,再写值,所以这里设置-1
while 1:
for i in range(n): # 上面一行
lie += 1
res[row][lie] = num
num += 1
n -= 1 # 判断
if n == 0:
break
for i in range(n): # 右侧一列
row += 1
res[row][lie] = num
num += 1
for i in range(n): # 下面一行
lie -= 1
res[row][lie] = num
num += 1
n -= 1 # 判断
if n == 0:
break
for i in range(n): # 左侧一列
row -= 1
res[row][lie] = num
num += 1
return res