0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

螺旋遍历二维数组漫画讲解

算法与数据结构 来源:程序员小灰 作者:程序员小灰 2020-11-26 14:01 次阅读

来自公众号:程序员小灰

————— 第二天 —————

什么意思呢?我们来举个例子,给定下面这样一个二维数组:

我们需要从左上角的元素1开始,按照顺时针进行螺旋遍历,一直遍历完所有的元素,遍历的路径就像下图一样:

经过这样的遍历,返回的元素结果如下:

1,2,3,4,5,10,15,20,19,18,17,16,11,6,7,8,9,14,13,12

————————————

第1层

从左到右遍历“上边”:

从上到下遍历“右边”:

从右到左遍历“下边”:

从下到上遍历“左边”:

第2层

从左到右遍历“上边”:

从上到下遍历“右边”:

从右到左遍历“下边”:

从下到上遍历“左边”:

第3层

从左到右遍历“上边”:

从上到下遍历“右边”:

从右到左遍历“下边”:

第三层的“左边”已无需遍历,二维数组到此遍历完毕。

publicclassSpiralOrder{ publicstaticListspiralOrder(int[][]matrix){ Listlist=newArrayList(); //当二维数组是空或任何一个维度是0,直接返回 if(matrix==null||matrix.length==0||matrix[0].length==0){ returnlist; } //m是矩阵的行数 intm=matrix.length; //n是矩阵的列数 intn=matrix[0].length; //二维数组的层数,取决于行和列的较小值 intsize=(Math.min(m,n)+1)/2; //大循环,从外向内逐层遍历矩阵 for(inti=0;ii;j++){ list.add(matrix[(m-1)-i][(n-1)-j]); } //从下到上遍历“左边” for(intj=i+1;jresultList1=spiralOrder(matrix); System.out.println(Arrays.toString(resultList1.toArray())); ListresultList2=spiralOrder(matrix2); System.out.println(Arrays.toString(resultList2.toArray())); } }

在上面的代码中,一个大循环当中包含了4个小循环。大循环控制了每一层的遍历,4个小循环分别实现了同一层上边、右边、下边,左边的遍历。

当遍历到最内层时,4个小循环并不会全都执行,比如测试代码中matrix2的最内层就只有一列,此时只需要遍历“上边”和“右边”。

这种情况下,遍历“下边”和“左边”的小循环必须加上了额外的条件限制:

(m-1)-i>i

i<(n-1)-i

使得同一条边不会被重复遍历到。

责任编辑:PSY

原文标题:漫画:如何螺旋遍历二维数组?

文章出处:【微信公众号:算法与数据结构】欢迎添加关注!文章转载请注明出处。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 螺旋
    +关注

    关注

    0

    文章

    32

    浏览量

    17389
  • 二维
    +关注

    关注

    0

    文章

    38

    浏览量

    11968
  • 遍历技
    +关注

    关注

    0

    文章

    2

    浏览量

    6563

原文标题:漫画:如何螺旋遍历二维数组?

文章出处:【微信号:TheAlgorithm,微信公众号:算法与数据结构】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    二维码识读设备有哪些类型

    随着二维码应用的日益普及,各类二维码识读设备也应运而生。这些设备不仅极大地方便了我们的日常生活,也为企业提供了更加高效便捷的服务。那么,你知道二维码识读设备都有哪些类型吗?让我们一起来了解一下。据
    的头像 发表于 11-05 16:10 19次阅读
    <b class='flag-5'>二维</b>码识读设备有哪些类型

    labview按行读取二维数组之后再按读取顺序重新组成二维数组如何实现?

    labview用了index Array按索引一行行读取二维数组之后想再按读取顺序重新组成一个二维数组如何实现,即第一次读取的作为第一行,第
    发表于 10-25 21:06

    请问labview是否无法向matlab传递3数组

    经过一些测试,发现在matlab script中只能传二维数组,利用打包.net库,好像还是只能传递二维数组。 是不是从底层就不支持,这两种语言的三
    发表于 10-22 20:14

    二维力传感器怎么安装,在安装二维力传感器的安装步骤

    二维力传感器是一种精密的测量设备,用于检测物体在平面内的力和力矩。为了确保其测量结果的准确性和稳定性,正确的安装步骤至关重要。本文将详细介绍二维力传感器的安装方法。
    的头像 发表于 09-27 17:14 212次阅读
    <b class='flag-5'>二维</b>力传感器怎么安装,在安装<b class='flag-5'>二维</b>力传感器的安装步骤

    Labview生成二维

     Labview 的一个Demo,生成二维码。
    发表于 08-01 17:12 6次下载

    技术|二维PDOA平面定位方案

    一、方案概述二维平面定位系统,采用UWB定位技术,精度可到30cm。通过PDOA算法,可实现单基站二维平面的实时人员定位,增强对危险区域的管控,有效预防安全事故发生。面对突发情况,能做到及时报警响应
    的头像 发表于 06-04 14:53 770次阅读
    技术|<b class='flag-5'>二维</b>PDOA平面定位方案

    二维PDMA可以使用描述符链吗?

    我正在尝试使用二维描述符连锁。 编写了一些二维描述符链的代码。 但我有一些疑问,比如 1.二维 PDMA 可以使用描述符链吗? 2.如果 1 是,请附上一些代码 我们是否可以使用 2 个结构或只使用 1 个结构即可。
    发表于 05-31 08:16

    数组的转换到二维数组后的行列增减问题

    请大佬指点,如VI,两个求助点: 1、一数组大小,在停止Vi前把数组大小增加到4,在循环外设置了一数组的行数为0了,为啥再次运行VI后,
    发表于 05-11 00:25

    怎么在Framewin里显示二维码?

    各位前辈好,刚刚开始使用STemWin。现在一个Framewin里显示二维码,在Framewin初始化里调用二维码函数没有反应。请问需要怎么调用?
    发表于 04-16 08:27

    Labview调用Halcon识别二维

    Labview调用Halcon识别二维码 可一次识别多个二维码 使用Labview 2020编辑,halcon的版本是 19.11,32位
    发表于 02-21 16:31

    将一数组转为二维python

    将一数组转为二维数组是一个常见的问题,特别是在处理数据时。一数组是由一个连续的数据块组成,而
    的头像 发表于 11-23 14:54 4890次阅读

    python如何定义二维数组

    在Python中,可以通过使用列表嵌套的方式来定义二维数组。具体步骤如下: Step 1: 创建一个空的二维列表 要创建一个空的二维数组
    的头像 发表于 11-21 15:12 1622次阅读

    python怎么创建二维数组

    如何创建二维数组在Python中是一个常见的问题。在Python中,我们可以使用嵌套的列表(list of lists)或者使用NumPy库来创建二维数组。在本文中,我们将详细介绍这两
    的头像 发表于 11-21 15:10 3556次阅读

    数组如何用下标表示指针

    比如题目中声明的这个,就是由4个5行3列的二维数组组成。把这些二维数组编个号,就是 0 1 2 3。
    的头像 发表于 11-14 10:38 677次阅读
    三<b class='flag-5'>维</b><b class='flag-5'>数组</b>如何用下标表示指针

    制造二维TMD晶体管面临的挑战

    学术界和工业界已经提出将二维(2D)过渡金属掺杂化合物(TMD)半导体作为未来取代物理栅极长度小于10纳米的硅晶体管的一种选择。在这篇评论中,我们分享了基于堆叠二维TMD纳米带制造互补金属氧化物
    的头像 发表于 11-07 09:55 1287次阅读
    制造<b class='flag-5'>二维</b>TMD晶体管面临的挑战