Skip to main content

Spiral Matrix

Problem statement

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

My solution

/**
* @param {number[][]} matrix
* @return {number[]}
*/
var spiralOrder = function(matrix) {
let results = []
let left = 0;
let bottom = matrix.length - 1;
let right = matrix[0].length - 1;
let top = 0;
let size = matrix.length * matrix[0].length;

while (results.length < size) {
for (let i = left; i <= right && results.length < size; i++) {
results.push(matrix[top][i]);
}
top++
for (let i = top; i <= bottom && results.length < size; i++) {
results.push(matrix[i][right])
}
right--;
for (let i = right; i >= left && results.length < size; i--) {
results.push(matrix[bottom][i])
}
bottom--;
for (let i = bottom; i >= top && results.length < size; i--) {
results.push(matrix[i][left])
}
left++;
}

return results;
};