Leetcode Link: 59. 螺旋矩阵 II - 力扣(LeetCode)

题目

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

解法一

思路: 本题就是模拟的思路,但是边界判断麻烦的一批。

为了避免这种情况,再确定边界及边界端点包含情况的时候,一定要确保

  1. 边界长度都相等
  2. 边界都遵循左闭右开或者左闭右闭。

如果一会边界+1,一会边界-1,一会包含右边界一会不包含,一定会报错!

本题中,我们大概就是这样遍历的 |300

题解

class Solution:
    def generateMatrix(self, n: int) -> List[List[int]]:
        matrix = [[0 for _ in range(n)] for _ in range(n)]
        num = 1
        # 定义上下左右的边界
        # 填写每一个边界的时候,都需要注意左开右闭!否则一定自己乱了!
        up = left = 0 
        down = right = n-1 
        while(num<=n*n):
            row = up 
            for col in range(left, right):
                matrix[row][col] = num
                num += 1
            col = right
            for row in range(up, down):
                matrix[row][col] = num
                num += 1
            row = down
            for col in range(right, left, -1):
                matrix[row][col] = num
                num += 1
            col = left
            for row in range(down, up, -1):
                matrix[row][col] = num
                num += 1
            # 当边界收缩到一起,变成一个格子的时候,不添加下面的东西会报错
            # for _ in (a,a) -> 不会进入这种循环,所以需要这个中心的判定。
            if up == down and left == right:
                matrix[up][left] = num
                num += 1
            # 这一步必须放在最后
            # 之前放在了中心判断的前面,当输入1时会错(奇数)
            up += 1
            down -= 1
            left += 1
            right -= 1
        return matrix
 

启发和联系