小言_互联网的博客

leetcode 59题 螺旋矩阵II

261人阅读  评论(0)

题目如下

给定一个正整数 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
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场