您当前的位置: 首页 >  Java

大别山码将

暂无认证

  • 3浏览

    0关注

    126博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

剑指OfferJZ19:顺时针打印矩阵-java版

大别山码将 发布时间:2021-08-30 13:01:11 ,浏览量:3

剑指OfferJZ3219:顺时针打印矩阵-java版
        • JZ19:则依次打印出数字

JZ19:则依次打印出数字

[1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10] 示例1 输入: [[1,2,3],[4,5,6],[7,8,9]] 返回值: [1,2,4,3]

在这里插入图片描述

我们可以把二维数组的每一层拆解为上下左右四条边,既然题目要求顺时针遍历,我们对边的访问顺序就应该是:上,右,下,左,也即是往右,往下,往左,往上 我们可以用flag变量来标记当前遍历矩阵的方向:

1:往右,2:往下,3:往左,4:往上

二维数组matrix的行数x为:matrix.length 列数y为:matrix[0].length

如图,

  • 我们一开始往右走(y增加),此时flag=1,经过1->2->3->#,走到3以后的位置时越界(y=4),即超过了数组的列数y,更改flag=2,并消除数组越界y–,最后转向x++

在这里插入图片描述

  • 接着往下走(x增加)此时flag=2,经过6->9->#,走到9以后的位置越界(x=4),即超过了数组的行数x,更改flag=3,并消除数组越界x–,最后转向y–

  • 接着往左走(y减小)此时flag=3,经过8->7->#,走到7以后的位置越界(y=-1),即超过了数组的列数y,更改flag=4,并消除数组越界y++,最后转向x–

  • 接着往上走(x减小)此时flag=4,经过4->1,走到1的位置发现1已经被遍历过了,也属于越界,那么我们将x增加回到4的位置,再将y增加转向到5的位置

到这里整个二维数组就走完了!

补充:

  1. :走到遍历过的数也属于越界
  2. :按以上步骤每走过没有越界的位置的数就把它存储到数组中,我这里是ans数组)
public class jz19{
    public ArrayList printMatrix(int [][] matrix) {
        ArrayList ans=new ArrayList();
        int flag=1;//flag标记当前矩阵遍历的方向 1->往右,2->往下,3->往左,4->往上
        int x=0;//矩阵的下标
        int y=0;
        boolean[][] vis=new boolean[matrix.length][matrix[0].length];//vis数组用来标记已经走过的点//matrix.length表示行数x,matrix[0].length表示列数y
        while (ans.size()            
关注
打赏
1664364263
查看更多评论
0.0367s