给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。
思路:
判断出路线都是有固定方向的 先→再↓再←再↑再→…一直循环到没数字
因此定义4个方向边界 当触及边界时即按固定方向转向 且其对应的边界值向内收缩1
若没触及边界 即按自身方向继续行走 改变坐标值直到触边界/数字全部遍历过
res代表最后返回的结果数组
matrix[i][j]代表矩阵中的元素
m、n分别代表矩阵的长和宽
l、r、u、d分别代表方向左、右、上、下
boundl=0,boundr=m,boundu=0,boundd=n分别代表左右上下的边界,与矩阵的长宽有关
function spiralOrder (matrix) {
let res=[],i=0,j=0;
let m=matrix[0].length-1,n=matrix.length-1
if(n<0) return [];
let turn= m===0?'d':'r';
let boundl=0,boundr=m,boundu=0,boundd=n;
for(let a=0;a<(m+1)*(n+1);a++){
res.push(matrix[i][j]);
if(turn==='r'){
j++;
if(j===boundr){
boundu++;
turn='d';
}
}else if(turn==='d'){
i++;
if(i===boundd){
boundr--;
turn='l';
}
}else if(turn==='l'){
j--;
if(j===boundl){
boundd--;
turn='u';
}
}else if(turn==='u'){
i--;
if(i===boundu){
boundl++;
turn='r';
}
}
}
return res;
}
console.log(spiralOrder([[1,2,3,4],[5,6,7,8],[9,10,11,12]]);