/* Spiral Matrix https://leetcode.com/problems/spiral-matrix/description/ Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order. Example 1: Input: [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ] Output: [1,2,3,6,9,8,7,4,5] Example 2: Input: [ [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] */ /** * @param {number[][]} matrix * @return {number[]} */ var spiralOrder = function(matrix) { if(matrix.length === 0) return []; var retArray = []; const rowLength = matrix.length; const colLength = matrix[0].length; const countRectangles = Math.ceil(Math.min(colLength, rowLength)/2) for(var i = 0; i < countRectangles; i++) printRect(matrix, i, rowLength, colLength, retArray); return retArray; }; var printRect = function(matrix, i, rowLength, colLength, retArray) { const firstRow = i; const firstCol = i; const lastRow = rowLength - i - 1; const lastCol = colLength - i - 1; for(var col = firstCol; col <= lastCol; col++) { retArray.push(matrix[firstRow][col]); } for(var row = firstRow + 1; row <= lastRow; row++) { retArray.push(matrix[row][lastCol]); } if(firstRow === lastRow || firstCol === lastCol) { return; } for(var col = lastCol - 1; col >= firstCol; col--) { retArray.push(matrix[lastRow][col]); } for(var row = lastRow - 1; row > firstRow; row--) { retArray.push(matrix[row][firstCol]); } } module.exports.spiralOrder = spiralOrder;