主要遵循右下左上顺序,主要解决边界问题
var spiralOrder = function(matrix) {
let left=0;
//这里计算列最后一个索引的值
let right=matrix[0].length-1;
let top=0;
//这里计算的是行最后一个索引的值
let buttom=matrix.length-1;
let direction="right"
const result=[];
//方向按照右下左上循环进行
while(left<=right&&top<=buttom)
{
//往右移动
if(direction==="right")
{
for(let i=left;i<=right;i++)
{
result.push(matrix[top][i]);
}
direction="buttom";
top++;
}
//往下移动
else if(direction ==="buttom"){
for(let i=top;i<=buttom;i++)
{
result.push(matrix[i][right]);
}
direction="left";
right--;
}
//往左移动
else if(direction ==="left"){
for(let i=right;i>=left;i--)
{
result.push(matrix[buttom][i]);
}
direction="top";
buttom--;
}
//往上移动
else if(direction ==="top"){
for(let i=buttom;i>=top;i--)
{
result.push(matrix[i][left]);
}
direction="right";
left++;
}
}
return result;
};