题目描述:给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。
示例:
输入: 3 输出: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ]
解法1。用上下左右4个数来限制,分成4个循环填数,维持一个cur表示当前要填的数字,累加,主要是下标的转换问题,和之前的螺旋矩阵I思路一致。
class Solution(object):
def generateMatrix(self, n):
"""
:type n: int
:rtype: List[List[int]]
"""
if n <= 0:
return []
elif n == 1:
return [[1]]
res = [[0 for _ in range(n)] for _ in range(n)] # 要注意的第1点,是0而非[0]
up = 0
down = n-1
left = 0
right = n-1
cur = 1
while True:
for i in range(left,right+1):
res[up][i] = cur
cur += 1 # 要注意的第2点,cur累加,如输入是3,该循环结束后cur==4
up += 1
if up > down:
break
for j in range(up, down+1):
res[j][right] = cur
cur += 1
right -= 1
if right < left:
break
for i in range(right,left-1,-1):
res[down][i] = cur
cur += 1
down -= 1
if down < up:
break
for j in range(down,up-1, -1):
res[j][left] = cur
cur += 1
left += 1
if left > right:
break
return res