diff --git a/LeetcodeProblems/Spiral-matrix.js b/LeetcodeProblems/Spiral-matrix.js new file mode 100644 index 0000000..619e2ec --- /dev/null +++ b/LeetcodeProblems/Spiral-matrix.js @@ -0,0 +1,78 @@ +/* +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]); + } +} + +var main = function() { + const matrix = [ + [ 1, 2, 3 ], + [ 4, 5, 6 ], + [ 7, 8, 9 ] + ] + + console.log(spiralOrder(matrix)); +} + +main(); +module.exports.main = main;