给你一个正整数 n
,生成一个包含 1
到 n2
所有元素,且元素按顺时针顺序螺旋排列的 n x n
正方形矩阵 matrix
。
示例 1:
输入:n = 3 输出:[[1,2,3],[8,9,4],[7,6,5]]
解题思路:
一道模拟题,模拟题就是本身不涉及算法,就是单纯根据题目所描述的模拟整个过程从而得到最后的结果。
找到正方形的边界,使用循环填充的方法来实现,填充的顺序分别为:
从左—>右
从上—>下
从右—>左
从下—>上
class Solution:
def generateMatrix(self, n: int) -> List[List[int]]:
up = 0
left = 0
right = n-1
down = n-1
nums = [[0] * n for i in range(n)] #初始化
res = 1
while res <= n*n:
for j in range(left,right+1):
nums[up][j] = res
res += 1
up += 1
for k in range(up,down+1):
nums[k][right] = res
res += 1
right -= 1
for m in reversed(range(left,right+1)):
nums[down][m] = res
res += 1
down -= 1
for p in reversed(range(up,down+1)):
nums[p][left] = res
res += 1
left += 1
return nums
容易错误的知识点:
1.嵌套列表的初始化
2.python range逆序迭代:
2.1 逆序
range(5, -1, -1):
5,4,3,2,1,0
2.2 用切片实现逆序
range(6)[::-1]
5,4,3,2,1,0
2.3 reversed():
reversed(range(6))
5,4,3,2,1,0
3. 其他矩阵边界同第一轮循环填充同理
while res <= n*n