题目
难度:★★★☆☆
类型:数组
方法:理清思路
力扣链接请移步本题传送门
更多力扣中等题的解决方案请移步力扣中等题目录
给定一个含有 M x N 个元素的矩阵(M 行,N 列),请以对角线遍历的顺序返回这个矩阵中的所有元素,对角线遍历如下图所示。
示例:
输入:
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]
输出: [1,2,4,7,5,3,6,8,9]
说明:
给定矩阵中的元素总数不会超过 100000 。
解答
问题分解是重要的。首先不用考虑来来回回的遍历方向,因为这是有规律可循的。我们可以首先把这一个个切片找出来,然后通过奇偶的特定组合,将各个切片重排序,重新组成列表即可。
class Solution:
def findDiagonalOrder(self, matrix):
if not matrix:
return []
rows, columns = len(matrix), len(matrix[0])
def get_piece(r, c):
res = []
while 0 <= r < rows and 0 <= c <= columns:
res.append(matrix[r][c])
r += 1
c -= 1
return res
start_points = [[0, j] for j in range(columns)] + [[i, columns-1] for i in range(1, rows)]
res = []
for i, (r, c) in enumerate(start_points):
lst = get_piece(r, c)
if i % 2 == 0:
lst = reversed(lst)
res += lst
return res
如有疑问或建议,欢迎评论区留言~
有关更多力扣中等题的python解决方案,请移步力扣中等题解析
网友评论