輸入一個矩陣,按照從外向裏以順時針的順序依次打印出每一個數字。
示例 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