出處: 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.lengthn == matrix[i].length1 <= 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
};
