7.螺旋矩阵

59. 螺旋矩阵 II

要点

1. 循环圈数为什么是n//2:
因为搜索一圈之后,下一圈的上边会往下走,下一圈的下边会往上走,高度就少2,下一圈的左边会往右走,下一圈的右边会往左走,相当于宽少2了,每次下一圈都会比上一圈的高度宽度都少2,直到这个没有外圈了,没有外圈就是宽度是和高度都是0的时候(偶数的情况),每次宽,高缩小2,直到宽,高是0。因为宽,高都一样,而且是一起缩2的,那么就当高缩2到0的时候就结束了,要缩多少次,就是圈。高假设是偶数,偶数-2-2-2一直到0,不就是这个偶数除2吗,就是圈数
2. 边界问题:
坚持一个原则,要不左闭右开,要不左闭右闭

class Solution:
   def generateMatrix(self, n: int) -> List[List[int]]:
       startx, starty = 0, 0#起始点
       loop, mid = n // 2, n // 2#循环圈数,中间点
       offset = 1
       count=1
       c = [[0] * n for i in range(n)]
       for a in range(1,loop+1):# 每循环一层偏移量加1,偏移量从1开始
           for j in range(starty,n-offset):#从左往右,左闭右开
               c[startx][j]=count
               count+=1
           for i in range(startx,n-offset):#从上到下
               c[i][n-offset]=count
               count+=1

           for j in range(n-offset,startx,-1):#从右往左
               c[n-offset][j]=count
               count+=1

           for i in range(n-offset,starty,-1):#从下往上
               c[i][starty]=count
               count+=1

           startx+=1#更新起始点和偏移量
           starty+=1
           offset+=1

       if n%2!=0:#如果n是奇数,中心点单独赋值
           c[mid][mid]=count
       return c


你可能感兴趣的:(7.螺旋矩阵)