498. 按對角線遍歷(Python)

題目

難度:★★★☆☆
類型:數(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解決方案,請移步力扣中等題解析

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容