顺时针打印矩阵--剑指offer
顺时针打印矩阵
- 热度指数:733969 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
- 算法知识视频讲解
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,
例如,如果输入如下4 X 4矩阵:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10
步骤:
1.设定方向dir与判定数组vis
2.当前方向时判断边界和下一位置是否合法,不合法则改变方向
3.新数组元素个数到达元素组个数则退出循环
// let arr=[
// [1 ,2 ,3 ,4 ],
// [5 ,6 ,7 ,8 ],
// [9 ,10,11,12],
// [13,14,15,16],
// [17,18,19,20]
// ];
function printMatrix(matrix)
{
let vis=[];
matrix.forEach(()=>vis.push([]));
let dir=1;
let i=0,j=0;
let x=matrix.length,y=matrix[0].length;
let res=[];
while(res.length<x*y){
//右
if(dir==1){
res.push(matrix[i][j]);
vis[i][j]=1;
if(j==y-1||vis[i][j+1]){
i++;
dir=2;
}else{
j++;
}
}
//下
else if(dir==2){
res.push(matrix[i][j]);
vis[i][j]=1;
if(i==x-1||vis[i+1][j]){
j--;
dir=3;
}else{
i++;
}
}
//左
else if(dir==3){
res.push(matrix[i][j]);
vis[i][j]=1;
if(j==0||vis[i][j-1]){
i--;
dir=4;
}else{
j--;
}
}
//上
else if(dir==4){
res.push(matrix[i][j]);
vis[i][j]=1;
if(i==0||vis[i-1][j]){
j++;
dir=1;
}else{
i--;
}
}
}
return res;
}