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

写在后面:

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

猜你喜欢

转载自blog.csdn.net/qq_33083551/article/details/125747680