/** * @param {number[][]} matrix * @return {number[]} */ var spiralOrder = function(matrix) { let ret = [] if (matrix.length ===0) return ret let rowBegin = 0 let rowEnd = matrix.length - 1 let colBegin = 0 let colEnd = matrix[0].length - 1 while(rowBegin <= rowEnd && colBegin <= colEnd) { for (let i = colBegin; i <= colEnd; i++) { ret.push(matrix[rowBegin][i]) } rowBegin++ for (let i = rowBegin; i <= rowEnd; i++) { ret.push(matrix[i][colEnd]) } colEnd-- if (rowBegin <= rowEnd) { for (let i = colEnd; i >= colBegin; i--) { ret.push(matrix[rowEnd][i]) } } rowEnd-- if (colBegin <= colEnd) { for (let i = rowEnd; i >= rowBegin; i--) { ret.push(matrix[i][colBegin]) } } colBegin++ } return ret };