学习算法,锻炼自我!记录自己的成长过程!
var spiralOrder = function (matrix) {
const map = (matrix,res) => {
for (let i = 0; i < matrix.length; i++) {
if (i === 0) {
//首先看图可以发现第一行可以直接要的
res = res.concat(matrix[i]);
} else if (i === matrix.length - 1) {
//最后一行则是需要反过来
res = res.concat(matrix[i].reverse());
} else {
//对于不是第一行和最后一行,需要先获取右侧的值
res.push(matrix[i].pop());
};
};
//当获取到第一行和最后一行,我们就需要它们了
matrix.pop();
matrix.shift();
if (matrix.length && matrix[matrix.length - 1].length) {
//这时候,我们还需要第一列的值
for (let i = matrix.length - 1; i >= 0; i--) {
res.push(matrix[i].shift());
};
};
//假如矩阵还没遍历完,则继续
if (matrix.length && matrix[matrix.length - 1].length) {
return map(matrix,res);
} else {
//否则返回结果值
return res;
};
};
return map(matrix,[]);
};