Skip to content

54. Spiral Matrix

Array Matrix Simulation

Problem - Spiral Matrix

Medium

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

 

Example 1:

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

Example 2:

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

Solutions

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
class Solution:
    def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
        m, n = len(matrix), len(matrix[0])
        directions = (0, 1, 0, -1, 0)
        vals = [[False] * n for _ in range(m)]
        i = j = k = 0
        result = []

        for _ in range(m * n):
            result.append(matrix[i][j])
            vals[i][j] = True
            x, y = i + directions[k], j + directions[k + 1]

            if x < 0 or x >= m or y < 0 or y >= n or vals[x][y]:
                k = (k + 1) % 4

            i += directions[k]
            j += directions[k + 1]

        return result

Submission Stats:

  • Runtime: 0 ms (100.00%)
  • Memory: 17.7 MB (88.18%)