螺旋矩阵 II

力扣刷题-螺旋矩阵【模拟】

题目描述

给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。

  • 示例 1:
1
2
输入:n = 3
输出:[[1,2,3],[8,9,4],[7,6,5]]
  • 示例 2:
1
2
输入:n = 1
输出:[[1]]
  • 提示:
1
1 <= n <= 20

代码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
class Solution:
    def generateMatrix(self, n: int) -> List[List[int]]:
        ans = [[0 for _ in range(n)] for _ in range(n)]
        # ans = [[0]*n]*n   使用这个初始化会有问题,后面针对原因再做深入探讨
        top = 0
        left = 0
        right = n-1
        bottom = n-1
        ant  = 1
        
        while top < bottom:
            for i in range(left,right):
                ans[top][i]=ant
                ant+=1
            for i in range(top,bottom):
                ans[i][right] = ant
                ant +=1
            for i in range(right,left,-1):
                ans[bottom][i]= ant
                ant +=1
            for i in range(bottom,top,-1):
                ans[i][left] = ant
                ant +=1

            top+=1
            left+=1
            right-=1
            bottom-=1

        if n % 2 == 1:
            ans[n//2][n//2]=ant
        return ans
错误记录

二维数组在初始化时会,如代码中注释的那样,会有问题,输入是3时,输出为:[[8,9,5],[8,9,5],[8,9,5]],代码会有问题,别的也会报错,我猜测可能跟此种方式初始化的内存分配策略有关系。具体原因稍后再做探讨。