59. 螺旋矩阵 II @Python @Go

原题

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

思路

遍历

复杂度

时间:O(n * n)
空间:O(n * n)

Python代码

class Solution:
    def generateMatrix(self, n: int) -> List[List[int]]:
        ans = [[0] * n for i in range(n)]
        # 坐标
        i, j = 0, 0
        # 方向
        d = 0
        directions = [(0, 1), (1, 0), (0, -1), (-1, 0)]
        num = 1
        while num <= n * n:
            ans[i][j] = num
            num += 1
            # 确定方向
            di, dj = directions[d]
            # 下一步在数组内且没走过
            if 0 <= i + di < n and 0 <= j + dj < n and ans[i+di][j + dj] == 0:
                i += di
                j += dj
            # 换方向
            else:
                d = (d + 1) % 4
                di, dj = directions[d]
                i += di
                j += dj
        return ans 

Go代码

func generateMatrix(n int) [][]int {
	// 构建二维切片
	ans := make([][]int, n)
	for i := range ans {
		ans[i] = make([]int, n)
	}
	// 坐标
	i, j := 0, 0
	// 方向
	d := 0
	directions := [][]int{{0, 1}, {1, 0}, {0, -1}, {-1, 0}}
	num := 1
	for num <= n*n {
		ans[i][j] = num
		num++
		// 确定方向
		di, dj := directions[d][0], directions[d][1]
		// 下一步在数组内且没走过
		if 0 <= i+di && i+di < n && 0 <= j+dj && j+dj < n && ans[i+di][j+dj] == 0 {
			i += di
			j += dj
		} else {
			d = (d + 1) % 4
			di, dj = directions[d][0], directions[d][1]
			i += di
			j += dj
		}
	}
	return ans
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值