[leetcode] 59. Spiral Matrix II @ python

本文介绍了一种生成螺旋矩阵的方法,通过设定方向和循环遍历的方式,实现了从1到n²的整数按螺旋顺序填充到n×n的矩阵中。算法的时间复杂度和空间复杂度均为O(n²),适用于计算机编程中的特定应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原题

Given a positive integer n, generate a square matrix filled with elements from 1 to n2 in spiral order.

Example:

Input: 3
Output:
[
[ 1, 2, 3 ],
[ 8, 9, 4 ],
[ 7, 6, 5 ]
]

解法

构建n*n的矩阵ans, 初始化值为0, 方向为(右, 下, 左, 上), 使用d来控制方向. 循环n**2次, 每次循环将i加到对应的位置, 并求出下一个位置的(x, y)值, 如果x+dx, y+dy在取值范围内且值为0, 表示可以在该位置赋值, 否则转变方向, 求新的(x,y)值.

Time: O(n2)
Space: O(n
2)

代码

class Solution(object):
    def generateMatrix(self, n):
        """
        :type n: int
        :rtype: List[List[int]]
        """
        ans = [[0]*n for i in range(n)]
        directions = [(0,1), (1,0), (0,-1), (-1,0)]
        x, y = 0, 0
        d = 0
        
        for i in range(1, n*n+1):            
            ans[x][y] = i
            dx, dy = directions[d]
            if 0<= x+dx < n and 0<= y+dy < n and ans[x+dx][y+dy] == 0:
                x = x+dx
                y = y+dy
            else:
                d = (d+1)%4
                dx, dy = directions[d]
                x = x+dx
                y = y+dy
                
        return ans
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值