【螺旋矩阵 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

能跑就行

  • 9
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值