/** * @param {number[][]} matrix * @return {number[]} */ var spiralOrder = function (matrix) { const m = matrix.length; const n = matrix[0].length; const ans = []; const dirs = [0, 1, 0, -1, 0]; for (let h = m * n, i = 0, j = 0, k = 0; h > 0; --h) { ans.push(matrix[i][j]); matrix[i][j] += 300; const x = i + dirs[k]; const y = j + dirs[k + 1]; if (x < 0 || x >= m || y < 0 || y >= n || matrix[x][y] > 100) { k = (k + 1) % 4; } i += dirs[k]; j += dirs[k + 1]; } for (let i = 0; i < m; ++i) { for (let j = 0; j < n; ++j) { matrix[i][j] -= 300; } } return ans; };