Skip to content

Latest commit

 

History

History
68 lines (61 loc) · 1.75 KB

59.md

File metadata and controls

68 lines (61 loc) · 1.75 KB

题目地址

https://leetcode-cn.com/problems/spiral-matrix-ii/

解答1

class Solution:
    def generateMatrix(self, n: int) -> List[List[int]]:
        """
            螺旋矩阵2

            给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。
            输入: 3
            输出:
            [
             [ 1, 2, 3 ],
             [ 8, 9, 4 ],
             [ 7, 6, 5 ]
            ]
        """
        nums = (x for x in range(1, n ** n + 1))
        return self.spiralMatrix(nums, n)

    def spiralMatrix(self, nums, n):
        """ 生成螺旋矩阵"""
        res = [[] for i in range(n)]
        if not n:
            return res
        res[0] = [next(nums) for i in range(n)]
        if n == 1:
            return res
        if n > 2:
            temp1 = [[next(nums)] for i in range(1, n - 1)]

        res[-1] = [next(nums) for i in range(n)][::-1]
        if n > 2:
            temp2 = [[next(nums)] for i in range(1, n - 1)][::-1]
            ans = self.spiralMatrix(nums, n - 2)
            for i in range(0, n - 2):
                res[i + 1] = temp2[i] + ans[i] + temp1[i]

        return res

解答2

def generateMatrix(n):
    """
        螺旋矩阵2

        给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。
        输入: 3
        输出:
        [
         [ 1, 2, 3 ],
         [ 8, 9, 4 ],
         [ 7, 6, 5 ]
        ]
    """
    A = [[0] * n for _ in range(n)]
    i, j, di, dj = 0, 0, 0, 1
    for k in range(n * n):
        A[i][j] = k + 1
        if A[(i + di) % n][(j + dj) % n]:
            di, dj = dj, -di
        i += di
        j += dj
    return A