力扣-数组-螺旋矩阵

 题目顺序

59螺旋矩阵Ⅱ,

解题思路

1.按照num从小到大依次填充,遵循从左到右,从上到下,从右到左,从下到上的层循环顺序;

2.层循环中要注意,每个部分保持相同的开闭原则,左闭右开或左开右闭防止混淆出错;

3.每层循环的start是不同的;每层循环的每部分个数依次减少;

4.注意n的奇偶,奇数单独对中心点进行赋值。

 

 

 1 class Solution(object):
 2     def generateMatrix(self, n):
 3         """
 4         :type n: int
 5         :rtype: List[List[int]]
 6         """
 7         res = [[0] * n for _ in range(n)] # 构造二维数组
 8         # L = [[0] * n] * n 不可用这句构造二维数组
 9         loop = n // 2 # 循环层数,奇数n还缺一个中心点
10         mid = n // 2 # 奇数时中心点坐标
11         start = 0 # 每层循环起始的点不同
12         num = 1 # 要填充的元素
13         for offset in range(1, loop+1):
14             # offset是循环偏移量,每层每行列要填充的数都会减少1
15             for i in range(start, n-offset):
16                 res[start][i] = num
17                 num += 1
18             for i in range(start, n-offset):
19                 res[i][n-offset] = num
20                 num += 1
21             for i in range(n-offset, start, -1):
22                 res[n-offset][i] = num
23                 num += 1
24             for i in range(n-offset, start, -1):
25                 res[i][start] = num
26                 num += 1
27             start += 1
28         if n%2==1:
29             res[mid][mid] = num
30         return res

# 类似二分法中要注意子区间的闭合,本题中也要遵循层循环中的上下左右四个部分的闭合;称之为循环不变量原则。

posted @ 2023-04-12 11:19  Yalking  阅读(41)  评论(0)    收藏  举报