出處: https://leetcode.com/problems/spiral-matrix/
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
/** * @param {number[][]} matrix * @return {number[]} */ var spiralOrder = function(matrix) { // 如果是一排的情形,直接壓扁送回 if (matrix[0].length === 1) { return matrix.flat() } // 記錄結果的陣列 const output = [] // 開始迴圈,直到所有數字用完 while(matrix.length && matrix[0].length) { // 第一排先整排加入 output.push(...matrix[0]) // 把已經加入的第一排刪除 matrix.shift() // 如果刪除後已經沒有任何數字,中斷迴圈 if (!matrix.length) break // 直的加入每一列的最後一個數字 for (let j = 0; j < matrix.length; j++) { output.push(matrix[j].pop()) } // 把最後一行返轉,加入結果並從陣列中刪除 const lastRow = matrix.pop() output.push(...lastRow.reverse()) // 如果刪除後已經沒有數字,或是最後一行本來就是空的,中斷迴圈 if (!matrix.length || !lastRow.length) break // 最後倒著往上加入每一列的第一個數字 for (let k = matrix.length - 1; k >= 0 ; k--) { output.push(matrix[k].shift()) } } return output };