自学内容网 自学内容网

【螺旋矩阵 II】python刷题记录

本来想着根据上一篇文章中大佬的思路来顺时针转转来改代码,想了一天没搞出来

http://t.csdnimg.cn/7sM8g

于是看了代码随想录的视频

一入循环深似海 | LeetCode:59.螺旋矩阵II_哔哩哔哩_bilibili

总结一下:

模拟的思路,每一圈中,模拟每条边,发现只需要左闭右开,4个循环就能分别完成一圈的模拟,然后调整出发的位置,以及终点的位置就能实现完成

圈数:n/2(这个时候需要对奇数情况,剩下中间一个元素进行处理,所以我们做一个判断并处理即可。

核心难点:并不是对1~n^2进行切块,而是对矩阵的元素进行赋值

上代码:

class Solution(object):
    def generateMatrix(self, n):
        """
        :type n: int
        :rtype: List[List[int]]
        """
        start_x=0
        start_y=0
        #offset代表每一圈中终点需要前移的位置数
        offset=1
        #初始化为1,因为后面可能n=1不会进入循环
        matrix=[[1 for _ in range(n)] for _ in range(n)]
        #count代表给出的数
        count=1
        for t in range(n/2):
             i=start_x
             j=start_y
             #第1条边
             for j in range(start_y,n-offset):
                matrix[i][j]=count
                count+=1
             j+=1
            #第2条边
             for i in range(start_x,n-offset):
                matrix[i][j]=count
                count+=1
             i+=1
            #第3条边
             for j in range(n-offset,start_y,-1):
                matrix[i][j]=count
                count+=1
             j-=1
            #第4条边
             for i in range(n-offset,start_x,-1):
                matrix[i][j]=count
                count+=1
            #圈数变化
             offset+=1
             start_x+=1
             start_y+=1
             #n为奇数的判断
             if n%2==1:
                j+=1
                matrix[i][j]=count
        return matrix
        #python有点不一样就是for i in range(a,b)后,i不会等于b,而是等于b-1

能跑就行


原文地址:https://blog.csdn.net/m0_73629042/article/details/140479169

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!