LeetCode 54: Spiral Matrix — Step-by-Step Visual Trace
Medium — Array | Matrix | Simulation | Traversal
The Problem
Given an m x n matrix, return all elements of the matrix in spiral order, starting from the top-left corner and moving clockwise through each layer.
Approach
Use four boundary variables (top, bottom, left, right) to define the current layer being traversed. Move clockwise by traversing top row, right column, bottom row, and left column, then shrink boundaries inward for the next layer.
Time: O(m * n) · Space: O(1)
Code
class Solution:
def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
if not matrix:
return []
rows, cols = len(matrix), len(matrix[0])
result = []
# Define the boundaries of the current layer
top, bottom, left, right = 0, rows - 1, 0, cols - 1
while top <= bottom and left <= right:
# Traverse the top row
for j in range(left, right + 1):
result.append(matrix[top][j])
top += 1
# Traverse the right column
for i in range(top, bottom + 1):
result.append(matrix[i][right])
right -= 1
# Traverse the bottom row
if top <= bottom: # Avoid duplicate traversal
for j in range(right, left - 1, -1):
result.append(matrix[bottom][j])
bottom -= 1
# Traverse the left column
if left <= right: # Avoid duplicate traversal
for i in range(bottom, top - 1, -1):
result.append(matrix[i][left])
left += 1
return result
Watch It Run
Try it yourself: Open TraceLit and step through every line.
Built with TraceLit — the visual algorithm tracer for LeetCode practice.
Comments