# 54 Spiral Matrix

Given an `m x n` `matrix`, return all elements of the matrix in spiral order.

Example 1:

``````1 -> 2 -> 3
v
4 -> 5    6
^         v
7 <- 8 <- 9

Input: matrix = [[1,2,3],[4,5,6],[7,8,9]]
Output: [1,2,3,6,9,8,7,4,5]
``````

Example 2:

``````1 -> 2 -> 3 -> 4
v
5 -> 6 -> 7    8
^              v
9 <- 10 < 11 < 12

Input: matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
Output: [1,2,3,4,8,12,11,10,9,5,6,7]
``````

Constraints:

• `m == matrix.length`
• `n == matrix[i].length`
• `1 <= m, n <= 10`
• `-100 <= matrix[i][j] <= 100`
 `````` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 `````` ``````class Solution: def spiralOrder(self, matrix: List[List[int]]) -> List[int]: result = [] rows, columns = len(matrix), len(matrix[0]) up = left = 0 right = columns - 1 down = rows - 1 while len(result) < rows * columns: # Traverse from left to right. for col in range(left, right + 1): result.append(matrix[up][col]) # Traverse downwards. for row in range(up + 1, down + 1): result.append(matrix[row][right]) if up != down: # Traverse from right to left. for col in range(right - 1, left - 1, -1): result.append(matrix[down][col]) if left != right: # Traverse upwards. for row in range(down - 1, up, -1): result.append(matrix[row][left]) left += 1 right -= 1 up += 1 down -= 1 return result``````