LeetCodeEasy-【面試題29. 順時針打印矩陣】

輸入一個矩陣,按照從外向裏以順時針的順序依次打印出每一個數字。

示例 1:
輸入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
輸出:[1,2,3,6,9,8,7,4,5]

示例 2:
輸入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
輸出:[1,2,3,4,8,12,11,10,9,5,6,7]

限制:
0 <= matrix.length <= 100
0 <= matrix[i].length <= 100
注意:本題與主站 54 題相同:https://leetcode-cn.com/problems/spiral-matrix/

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/shun-shi-zhen-da-yin-ju-zhen-lcof
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。

思路1:遍歷

直接模擬過程即可。
在這裏插入圖片描述

class Solution:
    def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
        if matrix == [] or matrix == [[]]:
            return []
        # 向右,向下,向左,向上
        dx = [0, 1, 0, -1]
        dy = [1, 0, -1, 0]
        # 標記當前方向的下標
        flag = 0
        # 標記是否走過
        visit = [[0] * len(matrix[0]) for _ in range(len(matrix))]
        x, y = 0, 0
        ans = []
        while True:
            if not (0 <= x < len(matrix) and 0 <= y < len(matrix[0])) or visit[x][y] == 1:
                break
            # 本方向上走到盡頭
            while 0 <= x < len(matrix) and 0 <= y < len(matrix[0]) and visit[x][y] == 0:
                ans.append(matrix[x][y])
                visit[x][y] = 1
                x += dx[flag]
                y += dy[flag]
            # 回退一格
            x -= dx[flag]
            y -= dy[flag]
            # 換一個方向,並走一格
            flag = (flag + 1) % 4
            x += dx[flag]
            y += dy[flag]
        return ans
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章