题目如下
给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。
示例:
输入: 3
输出:
[
[ 1, 2, 3 ],
[ 8, 9, 4 ],
[ 7, 6, 5 ]
]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/spiral-matrix-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
代码如下
class Solution:
def generateMatrix(self, n: int) -> List[List[int]]:
start = n ** 2
res = [[]]
for i in range(1,n+1):
for j in range(len(res)):
res[j].insert(0,start)
start -= 1
res = list(map(list,zip(*res)))
for j in range(len(res)):
res[j].reverse()
if start == 0 or start < 0:
return res
for j in range(len(res)):
res[j].insert(0,start)
start -= 1
res = list(map(list,zip(*res)))
for j in range(len(res)):
res[j].reverse()
- 执行用时 :44 ms, 在所有 Python3 提交中击败了94.48%的用户
内存消耗 :13.9 MB, 在所有 Python3 提交中击败了5.14%的用户 - 简单来说,就是从n2开始,在最开始插入一列,然后顺时针旋转矩阵,将res中的每个列表翻转,循环这个过程,直到把数字全部都插入到矩阵中。
- start从n2开始,记录下一次要插入的数字:
- (1) 将res中的每一个列表都插入一个数,然后start = start - 1,顺时针旋转res,将res中的每一个列表翻转。
- (2) 判断start是否为0,即数据是否全插入。
- (3) 重复(1)的过程。
- 之所以每个循环中做两次插入,是因为可以发现,插入一个数字两次,两个数字两次.…,当数字全部插入的时候,必定是n只插入了一次的时候。例如n=3,插入一个数字两次(8,9),两个数字两次((6,7),(4,5)),三个数字一次(1,2,3)。
转载:https://blog.csdn.net/qq_35701703/article/details/101226567
查看评论