栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

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

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

手撕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

写在后面:

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1012428.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号