关键是每次旋转方向都是顺时针,就可以做一个顺时针方向的模拟数组,来模拟下一步的路径
direction = [[0, 1], [1, 0], [0, -1], [-1, 0]]
要变化方向了就把下标+1%4
1 class Solution(object): 2 def spiralOrder(self, matrix): 3 """ 4 :type matrix: List[List[int]] 5 :rtype: List[int] 6 """ 7 m = len(matrix) 8 n = len(matrix[0]) 9 visit = [[0] * n for _ in range(m)] 10 direction = [[0, 1], [1, 0], [0, -1], [-1, 0]] 11 dir = 0 12 sum = 0 13 i = 0 14 j = 0 15 ni = 0 16 nj = 0 17 res = [] 18 while sum < (m * n): 19 visit[i][j] = 1 20 res.append(matrix[i][j]) 21 sum += 1 22 ni = i + direction[dir][0] 23 nj = j + direction[dir][1] 24 if ni < m and ni >= 0 and nj < n and nj >= 0 and visit[ni][nj] == 0: 25 i = ni 26 j = nj 27 else: 28 dir = (dir + 1) % 4 29 i = i + direction[dir][0] 30 j = j + direction[dir][1] 31 return res