螺旋遍历数组

螺旋遍历数组假设有一个 5×4 的二维矩阵 现需要按照顺时针方向将其螺旋遍历 返回数组中的元素 若二维数组如上所述 则其顺时针螺旋遍历的结果为 1 2 3 4 5 10 15 20 19 18 17 16 11 6 7 8 9 14 13 12 其实 二维数组的元素排列很像汉字的 回 回 字由一个大矩形包裹着一个小矩形 而二维数组也可以看成是外围的若干元素包裹着内部的元素 由外向内层层嵌套起来 那么我们完全可以按照一定的顺序从外向内一层一层遍历 就等同于对二维数组进行螺旋遍历了 我们可以把二

假设有一个5 x 4的二维矩阵,现需要按照顺时针方向将其螺旋遍历,返回数组中的元素:

螺旋遍历数组

若二维数组如上所述,则其顺时针螺旋遍历的结果为:1、2、3、4、5、10、15、20、19、18、17、16、11、6、7、8、9、14、13、12。

其实,二维数组的元素排列很像汉字的“回”。“回”字由一个大矩形包裹着一个小矩形,而二维数组也可以看成是外围的若干元素包裹着内部的元素,由外向内层层嵌套起来。

螺旋遍历数组

那么我们完全可以按照一定的顺序从外向内一层一层遍历,就等同于对二维数组进行螺旋遍历了。

我们可以把二维数组的每一层拆解成上下左右4条边,然后按照顺时针方向遍历上、右、下、左即可。

螺旋遍历数组

当然,需要注意的是在遍历同一层的4条边时,要避免重复遍历矩形的4个角,即需要注意外层的1、5、20、16和内层的7、9、14、12元素。还有,当二维数组的最内层只剩下一行或者一列的时候,最内层遍历不再是上下左右4条边。

import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class test { public static List 
  
    spiralOrder(int[][] matrix) { List 
   
     list = new ArrayList 
    
      (); //当二维数组是空或任何一个维度是0,直接返回 if (matrix == null || matrix.length == 0 || matrix[0].length == 0) { return list; } //m是矩阵的行数 int rows = matrix.length; //n是矩阵的列数 int columns = matrix[0].length; //二维数组的层数,取决于行和列的较小值 int size = (Math.min(rows, columns)+1)/2; //大循环,从外向内逐层遍历矩阵 for(int i=0; i < size; i++) { //从左到右遍历“上边” for (int j = i; j < columns - i; j++) { list.add(matrix[i][j]); } //从上到下遍历“右边” for (int j = i + 1; j < rows - i; j++) { list.add(matrix[j][(columns - 1)-i]); } //从右到左遍历“下边” for (int j = i + 1; j < columns - i && (rows - 1) - i > i; j++) { list.add(matrix[(rows - 1)-i][(columns - 1) - j]); } //从下到上遍历“左边” for (int j = i + 1; j < rows - 1 - i && i < (columns - 1)-i; j++) { list.add(matrix[(rows - 1) - j][i]); } } return list; } public static void main(String[] args) { int[][] matrix = { { 1, 2, 3, 4, 5 }, { 6, 7, 8, 9, 10 }, { 11, 12, 13, 14, 15 }, { 16, 17, 18, 19, 20 } }; int[][] matrix2 = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 }, { 10, 11, 12 }, { 13, 14, 15 } }; List 
     
       List1 = spiralOrder(matrix); System.out.println(Arrays.toString(List1.toArray())); List 
      
        List2 = spiralOrder(matrix2); System.out.println(Arrays.toString(List2.toArray())); } } 
       
      
     
    
  

螺旋遍历数组

 

代码来源:https://mp.weixin..com/s/FcCALo3tKWZpP2FE_16R5g

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/210584.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 上午7:19
下一篇 2026年3月19日 上午7:20


相关推荐

  • java nextline next_java中的nextLine函数

    java nextline next_java中的nextLine函数今天在学习java异常处理的时候,下面这段程序中的nextLine()的用法怎么也看不明白。初学者看到这段代码会误以为程序中的input.nextLine()这句是多余的。其实,不使用这句的话,如果输入不是整数,程序会陷入死循环。当你不加input.nextLine()时,你输入小数,try块中给input.nextInt()就无法执行,因为小数无法被读取,我猜是小数一直留在键盘缓冲区。这时con…

    2022年5月6日
    62
  • CodeBlocks 中文乱码解决方法「建议收藏」

    CodeBlocks 中文乱码解决方法「建议收藏」Windows下,按照安装步骤一步步来就行,由于之前不知道怎么设置错误,然后就出现中文乱码问题,出现找了很多方法,但都不合适,最后自己一点点摸索,无非就是尽量需找默认设置,步骤如下:(1)按照下图去选择(2)settings->globalcompilersettings点击一下resetdefaults,确定,就可以了!

    2022年7月14日
    46
  • Springboot内置tomcat优化

    Springboot内置tomcat优化目录一 spring configuratio metadata json 内置 tomcat 优化 1 常用配置说明 2 springboot 中的配置文件二 keepalive 链接设置一 spring configuratio metadata json 内置 tomcat 优化 1 常用配置说明我们在使用 springboot 开发 web 项目时 大多数时候采用的是内置的 Tomcat 当然也可以配置支持内置的 jetty 内置 Tomcat 有什么好处呢 方便微服务部署 减少繁杂的配置 方便项

    2026年3月17日
    1
  • 数学建模及其基础知识详解(化学常考知识点)

    @[TOC]自动根据文章标题生成目录一、综合评价方法根据各评价方法所依据的理论基础,现代综合评价方法大致分为以下四大类:1、专家评价方法2、运筹学与其他数学方法2.1、层次分析法(AHP)2.2、模糊综合评判法(FCE)2.3、数据包络分析法(DEA)3、基于统计和经济的方法3.1、TOPSIS评价法,优化可用熵权法3.2、主次分析法和因子分析法主成分分析法通过克服相关性、重叠性,用较少的变量来代替原来较多的变量,而这种代替可以 反映原来多个变量的大部分信息,这实际上是一

    2022年4月13日
    46
  • 反相加法器与同相加法器对比分析「建议收藏」

    反相加法器与同相加法器对比分析「建议收藏」最近对比复习了模电里面同相加法器与反相加法器电路。分析了他们之间的差别,并将分析过程记录在下,欢迎大家交流讨论。1、反相加法器R为平衡电阻,R=R1//R2//Rf。根据运算放大器的虚短虚断特性

    2022年7月3日
    61
  • mysql 读写分离 事务_mysql 读写分离(基础篇)

    mysql 读写分离 事务_mysql 读写分离(基础篇)基本的原理是让主数据库处理事务性查询,而从数据库处理SELECT查询。数据库复制被用来把事务性查询导致的变更同步到集群中的从数据库。JanKneschke在《MySQLProxylearnsR/WSplitting》中详细的介绍了这种技巧以及连接池问题:为了实现读写分离我们需要连接池。我们仅在已打开了到一个后端的一条经过认证的连接的情况下,才切换到该后端。MySQL协议首先进行握手。当…

    2022年6月6日
    42

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号