12345678910111213141516171819202122232425262728293031323334353637383940 |
- from typing import List
- class Solution:
- def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
- m, n = len(matrix), len(matrix[0])
- tar = m * n
- visit = set()
- res = []
- x, y = 0, -1
- dx, dy = 0, 1
- for num in range(tar):
- x, y = x + dx, y + dy
- res.append(matrix[x][y])
- visit.add((x, y))
- dx, dy = self.coor((x, y), (dx, dy), visit, m, n)
- return res
- def coor(self, coord, direct, visit, m, n):
- x, y = coord
- dx, dy = direct
- if dx == 0 and dy == 1:
- if y == n - 1 or (x, y + 1) in visit:
- return (1, 0)
- if dx == 1 and dy == 0:
- if x == m - 1 or (x + 1, y) in visit:
- return (0, -1)
- if dx == 0 and dy == -1:
- if y == 0 or (x, y - 1) in visit:
- return (-1, 0)
- if dx == -1 and dy == 0:
- if (x - 1, y) in visit:
- return (0, 1)
- return (dx, dy)
- if __name__ == "__main__":
- s = Solution()
- a = s.spiralOrder([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
- print(a)
|