螺旋矩阵旋转法php,【LeetCode】*0054 螺旋矩阵

该博客介绍了一种使用Python实现矩阵螺旋顺序遍历的方法。通过取第一行、生成反向迭代器和利用zip(*)函数实现矩阵的旋转,从而达到螺旋遍历的效果。文章提到了reversed()函数和zip(*)的用法,这些都是解决问题的关键技巧。
摘要由CSDN通过智能技术生成

# -*- coding:utf-8 -*-

class Solution(object):

def spiralOrder(self, matrix):

""":typematrix: List[List[int]]:rtype: List[int]

"""ret = []

if matrix == []:

return ret

ret.extend(matrix[0]) # 上侧

# 生成一个反向迭代器,比如1,2,3生成3 2 1

new = [reversed(i) for i in matrix[1:]]

if new == []:

return ret

# zip用来解压迭代器 相当于把new生成的迭代器依次遍历,达到一个类似“逆时针旋转”的样子。

r = self.spiralOrder([i for i in zip(*new)])

ret.extend(r)

return ret

if __name__ == '__main__':

matrix = [

[1, 2, 3],

[4, 5, 6],

[7, 8, 9]

]

matrix = [

[1, 2, 3, 4],

[5, 6, 7, 8],

[9, 10, 11, 12]

]

print(Solution().spiralOrder(matrix))

思路:这道题刚一开始我是打算类似于前面有一道题Z字抖动一样,靠下标找结果,但是发现一个这个做法,就真的强,写下来学习一下。

因为是顺时针找元素,相当于我们不断的取矩阵第一行然后逆时针旋转矩阵,因此这个方法采用对矩阵(二维列表)进行操作。首先取第一行,然后生成一个反向迭代器,最后由zip(*)处理这个迭代器,达到了旋转的效果。

举个例子:

[

[1, 2, 3, 4],

[5, 6, 7, 8],

[9, 10, 11, 12]

]

这个矩阵首先我们取了第一行:

[

[5, 6, 7, 8],

[9, 10, 11, 12]

]

这时候生成一个反向迭代器列表,在这个迭代器中你可以理解成这样,只不过它还是个迭代器,并不是列表

[

[8, 7, 6, 8],

[12, 11, 10, 9]

]

最后我们通过zip(*)遍历这个迭代器。

[

[8,12],

[7,11],

[6,10],

[8,9]

]

这时候我们再取第一行,是不是就步入正轨了?

这道题学到了不少,首先这个思路我是没想到的,再一个是reversed()这个反向迭代器和zip(*)我还是第一次遇到。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值