什么螺旋矩阵:螺旋矩阵是指一个呈螺旋状的矩阵,它的数字由第一行开始到右边不断变大,向下变大,向左变大,向上变大,如此循环。
如下:
最终组成的结果是
[
1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10
]
function spiralOrder(matrix) {
let result = []; // 结果集
let num = 1; // 标志位
while (num) {
if (num === 1) {
// 从左到右
// 获取源第一项,铺开
result.push(...matrix.shift());
} else if (num === 2) {
// 从上倒下
// 获取源每一项、最后一位,铺开
matrix.forEach((it) => {
// 这里pop之后,it可能是个空数组
result.push(it.pop());
});
} else if (num === 3) {
// 从右到左
// 获取源最后一项、反转、铺开
result.push(...matrix.pop().reverse());
} else if (num === 4) {
// 从下到上
// 获取源每一项、的第一位,铺开
for (var i = matrix.length - 1; i > -1; i--) {
// 这里shift之后,matrix[i]可能是个空数组
result.push(matrix[i].shift());
}
}
// 因为我们直接操作源数组
// 源数组长度被不断缩小
// 没有长度的时候,表示遍历完毕
// 返回 result
// matrix[0]可能是个空数组
if (!matrix.length || !matrix[0].length) {
return result;
}
// 加 1
// 表示切换获取项的方式
num += 1;
// 转一圈后,复位,从新开始,从左到右
if (num > 4) {
num = 1;
}
}
}
console.log(
spiralOrder([
[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
[10, 11, 12],
])
);