一. 题目
给定一个含有 M x N 个元素的矩阵(M 行,N 列),请以对角线遍历的顺序返回这个矩阵中的所有元素,对角线遍历如下图所示。
示例:
输入: [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ] 输出: [1,2,4,7,5,3,6,8,9] 解释:
说明:
- 给定矩阵中的元素总数不会超过 100000 。
二. 解题方案
1,首先,按照我的问题分析习惯,先给这个题目做一个定位,这是一道斜对角遍历数组的题目
2,进一步分析,并不是纯粹的斜对角遍历,确定遍历开始的起始元素和遍历方向是一个麻烦的事情。
3,画一个4*4的图,基本就把所有情况都列出来了,然后开始编码
4,总之,就是包含三个部分,斜对角遍历,更换起始位置,确定遍历方向。
三. 代码
class Solution(object):
def findDiagonalOrder(self, matrix):
"""
:type matrix: List[List[int]]
:rtype: List[int]
"""
sign = 1 # 1 is up, -1 is down
index_0 = 0
index_1 = 0
result = []
while index_0 != len(matrix) and index_1 != len(matrix[0]):
result.append(matrix[index_0][index_1])
if sign == 1:
if index_1 == len(matrix[0]) - 1:
sign = -1
index_0 += 1
elif index_0 == 0:
sign = -1
index_1 += 1
else:
index_0 -= 1
index_1 += 1
elif sign == -1:
if index_0 == len(matrix) - 1:
sign = 1
index_1 += 1
elif index_1 == 0:
sign = 1
index_0 += 1
else:
index_0 += 1
index_1 -= 1
return result
四. 参考资料
1. leetcode: https://leetcode-cn.com/problems/diagonal-traverse/