题目链接:https://leetcode.cn/problems/spiral-matrix-ii/

核心思想:模拟

  • 填充上行从左到右

  • 填充右列从上到下

  • 填充下行从右到左

  • 填充左列从下到上

  • 左闭右开

class Solution(object):
    def generateMatrix(self, n):
        nums = [[0]* n for _ in range(n)]
        startx,starty = 0,0

        loop,mid = n//2,n//2
        count = 1

        for offset in range(1,loop+1):
            for i in range(starty,n-offset):
                nums[startx][i] = count
                count += 1
            for i in range(startx,n-offset):
                nums[i][n-offset] = count
                count += 1
            for i in range(n-offset,starty,-1):
                nums[n-offset][i] = count
                count += 1
            for i in range(n-offset,startx,-1):
                nums[i][starty] = count
                count += 1
            startx += 1
            starty += 1
        
        if n % 2 != 0:
            nums[mid][mid] = count
        return nums

        

解析:

  • nums = [[0]* n for _ in range(n)]:建二维列表(即n×n的矩阵)并初始化为全0

  • startx,starty:起始(x,y)位置

  • loop:转圈数 mid :中心位置

  • count:开始数

  • startx += 1 starty += 1:每一圈完成后,起始位置就从(0,0)到(1,1)的下一个内圈