var spiralOrder = function(matrix) {
// !解题核心:本题存在一个路径上的循环:
// 循环(左 ——> 右,上 ——> 下,右 ——> 左,下 ——> 上)
// 如果是空数组
if (matrix.length === 0) return [];
// 定义四个指针
let top = 0;
let bottom = matrix.length - 1;
let left = 0;
let right = matrix[0].length - 1;
// 定义存储最终结果的数组
let res = [];
// 最外边的循环是控制 顺时针圈数的循环
while (1) {
// 左 ——> 右
for (let i = left; i <= right; i++) {
res.push(matrix[top][i]);
}
top++;
if (top > bottom) break;
// 上 ——> 下
for (let i = top; i <= bottom; i++) {
res.push(matrix[i][right]);
}
right--;
if (right < left) break;
// 右 ——> 左
for (let i = right; i >= left; i--) {
res.push(matrix[bottom][i]);
}
bottom--;
if (bottom < top) break;
// 下 ——> 上
for (let i = bottom; i >= top; i--) {
res.push(matrix[i][left]);
}
left++;
if (left > right) break;
}
return res
};