題目
難度:★★★☆☆
類型:數(shù)組
方法:理清思路
力扣鏈接請移步本題傳送門
更多力扣中等題的解決方案請移步力扣中等題目錄
給定一個含有 M x N 個元素的矩陣(M 行,N 列),請以對角線遍歷的順序返回這個矩陣中的所有元素,對角線遍歷如下圖所示。
示例:
輸入:
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]
輸出: [1,2,4,7,5,3,6,8,9]
說明:
給定矩陣中的元素總數(shù)不會超過 100000 。
解答
問題分解是重要的。首先不用考慮來來回回的遍歷方向,因?yàn)檫@是有規(guī)律可循的。我們可以首先把這一個個切片找出來,然后通過奇偶的特定組合,將各個切片重排序,重新組成列表即可。
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
如有疑問或建議,歡迎評論區(qū)留言~
有關(guān)更多力扣中等題的python解決方案,請移步力扣中等題解析