手撕leecode之python:59.螺旋矩阵II

声明:个人学习之用,能力有限,仅供参考。

力扣59:螺旋矩阵 

一,思路:

第一反应先是暴力解法,利用for循环来解决。

试了试感觉人晕了,

查询了下资料,本质上是考察对代码的掌握能力。

模拟顺时针画矩阵的过程:

1.上行从左到右

2.右列从上到下

3.下行从右到左

4.左列从下到上。

最开始被N=3这个例子给绕进去了。建议自己画一个N=5的例子,更方便理解----------这里我强调的是,每次顺时针画完之后,初始点x,y需要+1,变换初始点的这个操作。

在这里引入这个理解。

这里意味着,每当遇到拐角的时候,拐角处的点,是给新的一边来画。

那翻译成术语来说,这是一个左闭右开的规则[,)

 代码

#螺旋矩阵
#
def generate_matrix(n):
    nums = [[0] * n for _ in range(n)]
    startx, starty =0, 0                          #起始点
    loop, mid = n//2, n//2                        #迭代次数,n为奇数时,矩阵的中心点
    count = 1                                     #计数

    for offset in range(1, loop + 1):             #每循环一层偏移量加1,偏移量从1开始
        for i in range(starty, n - offset):       #从左至右,左闭右开
            nums[startx][i] = count
            count += 1
        for i in range(startx, n - offset):       #从上至下
            nums[i][n - offset] = count
            count += 1 
        for i in range(n - offset, starty, -1):   #从右至左
            nums[n - offset][i] = count
            count += 1
        for i in range(n - offset, startx, -1):   #从下至上
            nums[i][starty] = count
            count += 1
        startx += 1
        starty += 1
    
    if n % 2 !=0:                                 #n为奇数时,填充中心点
        nums[mid][mid] = count
    return nums

写在后面:

我要是面试官,我会问你,逆时针打印呢?聊聊你的想法。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值