题目顺序
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
# 类似二分法中要注意子区间的闭合,本题中也要遵循层循环中的上下左右四个部分的闭合;称之为循环不变量原则。
标签:res,矩阵,力扣,start,range,num,数组,offset,循环 From: https://www.cnblogs.com/shi-yi/p/17309177.html