Spiral Matrix
You're given a matrix with m rows and n columns. Traverse it in a spiral: start at the top-left cell and move right along the top row, drop down the rightmost column, sweep left along the bottom row, climb the leftmost column, then keep spiraling inward until every cell has been visited. Return the values in the order you visited them.
Edge cases: Matrices with just one row or one column. An empty matrix should return [].
Sample Input and Output
Example 1 · Run Sample
matrix = [[1,2,3],[4,5,6],[7,8,9]] [1,2,3,6,9,8,7,4,5] Example 2
matrix = [[1,2,3]] [1,2,3] - 0 <= matrix.length <= 10
- All rows have the same length, at most 10.
- -100 <= matrix[i][j] <= 100
Test Cases (2)
Approach: Layer-by-Layer Boundaries
Track four boundaries — top, bottom, left, right — and peel off one layer of the spiral per iteration. After each direction traversal, shrink the corresponding boundary and check whether you've crossed over.
function spiralOrder(matrix) {
const result = [];
if (!matrix.length) return result;
let top = 0, bottom = matrix.length - 1;
let left = 0, right = matrix[0].length - 1;
while (top <= bottom && left <= right) {
for (let i = left; i <= right; i++) result.push(matrix[top][i]);
top++;
for (let i = top; i <= bottom; i++) result.push(matrix[i][right]);
right--;
if (top <= bottom) {
for (let i = right; i >= left; i--) result.push(matrix[bottom][i]);
bottom--;
}
if (left <= right) {
for (let i = bottom; i >= top; i--) result.push(matrix[i][left]);
left++;
}
}
return result;
}Time Complexity: O(m × n) — every element is visited once
Space Complexity: O(1) extra space (excluding the output array)
Saved in this browser only. Private to you.