59.螺旋矩阵II

本文介绍了如何使用Python实现一个名为Solution的类,生成一个包含1到n^2螺旋排列的正方形矩阵。关键在于理解逻辑,尤其是正确处理边界条件。作者在描述过程中强调了画图和检查细节的重要性。
摘要由CSDN通过智能技术生成

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

示例:

输入: 3 输出: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ]

思路:

注意:统一原则:左闭右开

class Solution:
    def generateMatrix(self, n: int) -> List[List[int]]:
        r = [[0]*n for _ in range(n)]
        loop, mid = n//2, n//2
        count = 1

        for i in range(0,loop):
            for j in range(i, n-i-1):
                r[i][j] = count
                count += 1
            for j in range(i, n-i-1):
                r[j][n-i-1] = count
                count += 1
            for j in range(n-i-1, i, -1):
                r[n-i-1][j] = count
                count += 1
            for j in range(n-i-1, i, -1):
                r[j][i] = count
                count += 1
        if n%2 == 1:
            r[loop][loop] = n**2
        return r

注意:

一开始写错了一个地方,for j in range(i, n-i-1), 少写了后面的减1. 一定要特别注意。

这道题关键是自己在纸上画图,把逻辑搞清楚。乍一看好像很复杂,其实把逻辑弄清楚以后,就不难了。

手写讲解过程:

重新写了一遍,这个代码看上去和之前的一样,但是报错了

class Solution:
    def generateMatrix(self, n: int) -> List[List[int]]:
        r = [[0] * n for _ in range(n)]
        loop, mid = n//2, n//2
        count = 1

        for i in range(loop):
            for j in range(i,n-i-1):
                r[i][j] = count
                count += 1
            for j in range(i,n-i-1):
                r[j][n-i-1] = count
                count += 1
            for j in range(n-i-1, i, -1):
                r[n-i-1][j] = count
                count += 1
            for j in range(n-i-1, i, -1):
                r[i][j] = count
                count += 1
        
        if n%2 == 1:
            r[mid][mid] = n**2
        return r

Input

n =

3

Output

[[1,8,7],[0,9,4],[0,6,5]]

Expected

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

我找到问题所在了,是最后一个for loop里面,应该是r[j][i] = count, 而不是r[i][j],看来一定要小心谨慎地思考啊,一定要认真思考每一个细节。

不过这个代码挺顺畅地写下来了,只有一个小错误,小细节。还是表扬一下自己。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值