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

    浏览量

    17326
  • 二维
    +关注

    关注

    0

    文章

    38

    浏览量

    11953
  • 遍历技
    +关注

    关注

    0

    文章

    2

    浏览量

    6546

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

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

收藏 人收藏

    评论

    相关推荐

    Labview调用Halcon识别二维

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

    LabVIEW开发二维激光振镜扫描控制系统

    LabVIEW开发二维激光振镜扫描控制系统 本项建立一个二维激光振镜扫描控制系统,涵盖了光学系统和激光器的选择以及振镜驱动器的设计。项目的核心工作包括振镜驱动器的硬件电路设计、上位机控制软件的编写
    发表于 12-22 11:00

    将一维数组转为二维python

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

    python如何定义二维数组

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

    python怎么创建二维数组

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

    可以用单片机生成二维码吗?

    可以用单片机生成二维码吗 有没有具体的实例
    发表于 10-27 08:05

    用Labview将二维数组保存至Excel

    #Labview用Labview将二维数组保存至Excel
    发表于 09-21 14:57 8次下载

    二维数组存储最小元素是怎么实现的?

    二维数组存储最小元素是怎么实现的?  在计算机编程中,数组是一种非常重要的数据结构之一。它用于存储一系列相同类型的变量,这些变量被放入单一的数组中并通过一个唯一的编号(称为
    的头像 发表于 09-13 11:17 286次阅读

    C语言—二维数组介绍

    定义一个两行三列的二维数组,总共有6个元素
    的头像 发表于 09-11 14:51 508次阅读
    C语言—<b class='flag-5'>二维</b><b class='flag-5'>数组</b>介绍

    OpenHarmony应用实现二维码扫码识别

    应用的扫描二维码的页面。 本文就以​​橘子购物示例应用​​为例,来讲解OpenHarmony应用二维码开发相关的技术点。 我们先看下二维码相关的几个概念。 ●
    发表于 08-23 17:00

    【verilog每日一练】reg型存储器声明(二维数组

    声明一个位宽为8,深度为32的二维数组变量ram
    发表于 08-22 09:45

    C语言中指针数组数组指针的区别

    指针和数组之间存在着紧密的关系。在本文中,我们将探讨指针和数组的关系、指针算术和数组遍历、多维数组与指针以及指针
    发表于 08-17 15:29 269次阅读

    labview如何将多次执行的二维数组拼接起来?

    想把循环分别为1、2、3执行后的结果拼接成1个2数组,纵向排列,最后的结果就是第1列是1-24,宽度是8的数组,将红框里的数据纵向拼接起来。 产生数组的方式是下面的框图,谁有好的思
    发表于 06-09 10:01

    使用VCS观察Verilog二维数组仿真值的方法

    FIR设计过程中,不可避免使用到reg/wire的二维数组
    的头像 发表于 06-06 11:12 2338次阅读
    使用VCS观察Verilog<b class='flag-5'>二维</b><b class='flag-5'>数组</b>仿真值的方法

    荣小菜补钙记第59期_LabVIEW之二维图片拖拽与缩放 Demo

    荣小菜补钙记第59期_LabVIEW之二维图片拖拽与缩放同步更新于 WeChat:荣小菜在补钙大家好,我是荣小菜,本期用一个小Demo讲解二维图片控件中实现图片拖拽的缩放。 1.缩放功能实现
    发表于 05-19 18:59