题目:
给定一个含有 M x N 个元素的矩阵(M 行,N 列),请以对角线遍历的顺序返回这个矩阵中的所有元素,对角线遍历如下图所示。
示例:
输入: [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ] 输出: [1,2,4,7,5,3,6,8,9] 解释:
说明:
- 给定矩阵中的元素总数不会超过 100000 。
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/diagonal-traverse/
解法一:
最笨的方法(分情况讨论):
遍历过程共有两种状态:对角线遍历和对角线方向转换。
对角线遍历:右上RU和左下LB两个方向。
对角线方向转换:(转换条件)对角线方向上没有值
(转换方向)RU时先右后下,LB时先下后右
结束条件:最终得到的坐标是(h,w)或不在矩阵范围。
class Solution:
def findDiagonalOrder(self, matrix: List[List[int]]) -> List[int]:
if not matrix:
return []
h = len(matrix)
w = len(matrix[0])
S = 0 #0为右上状态,1为左下状态
h0 = 0
w0 = 0
lists = []
lists.append(matrix[h0][w0])
while(1):
if S == 0:
h1 = h0-1
if(h1<0):
S = 1
h1 = h0
w1 = w0+1
if(w1==w):
S = 1
h1 = h0+1
w1 = w0
elif S == 1:
w1 = w0-1
if(w1<0):
S = 0
w1 = w0
h1 = h0+1
if(h1==h):
S = 0
w1 = w0+1
h1 = h0
h0 = h1
w0 = w1
if h0<h and w0<w:
lists.append(matrix[h0][w0])
else:
return lists