顺时针打印矩阵--剑指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;
}

 

 

posted @ 2020-03-28 21:27  aeipyuan  阅读(123)  评论(0编辑  收藏  举报