描述
给定一个m x n大小的矩阵(m行,n列),按螺旋的顺序返回矩阵中的所有元素。
示例1
输入:
[[1,2,3],[4,5,6],[7,8,9]]
返回值:
[1,2,3,6,9,8,7,4,5]
分析:
本题时间空间限制较为宽松,用模拟系统的直觉的方法来做也能AC。
但排行第一的代码更为巧妙。
:
# write code here
res = []
while matrix:
res += matrix[0]
matrix = list(zip(*matrix[1:]))[::-1]
return res
初始状态为:
1 2 3
4 5 6
7 8 9
第一次循环,
res += matrix[0] -> res=[1,2,3]
此时,根据zip的特性:
会重新打包得到这样一个list:[(4, 7), (5, 8), (6, 9)]
切片将其转为: [(6, 9), (5, 8), (4, 7)]
第二次循环,
res += matrix[0] -> res=[1,2,3]
这里需要注意一个知识点:
假设a为列表,b为元组
那么a+b的操作是不被允许的
但a+=b是合法的,究其原因,大该是会自动将b推导为list以实现两个列表相加
zip后[(5, 4), (8, 7)]
反转后: [(8, 7), (5, 4)]
…
后面的以此类推,不再列出
该代码的精妙之处在于:
扫描二维码关注公众号,回复:
13293962 查看本文章

- 利用zip完成方向上的变化
- 利用切片翻转来满足顺序上的要求
很难想到,记在这里,等于我会了