作者 | 小灰

来源 | 程序员小灰(ID:chengxuyuanxiaohui)

 第二天  

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

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

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

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

回公司后

第1层

从左到右遍历“上边”:

从上到下遍历“右边”:

从右到左遍历“下边”:

从下到上遍历“左边”:

第2层

从左到右遍历“上边”:

从上到下遍历“右边”:

从右到左遍历“下边”:

从下到上遍历“左边”:

第3层

从左到右遍历“上边”:

从上到下遍历“右边”:

从右到左遍历“下边”:

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

public class SpiralOrder {public static List<Integer> spiralOrder(int[][] matrix) {List<Integer> list = new ArrayList<Integer>();//当二维数组是空或任何一个维度是0,直接返回if (matrix == null || matrix.length == 0 || matrix[0].length == 0) {return list;}//m是矩阵的行数int m = matrix.length;//n是矩阵的列数int n = matrix[0].length;//大循环,从外向内逐层遍历矩阵for(int i=0; i<(Math.min(m, n)+1)/2; i++) {//从左到右遍历“上边”for (int j=i; j<n-i; j++) {list.add(matrix[i][j]);}//从上到下遍历“右边”for (int j=i+1; j<m-i; j++) {list.add(matrix[j][(n-1)-i]);}//从右到左遍历“下边”for (int j=i+1; j<n-i; j++) {list.add(matrix[(m-1)-i][(n-1)-j]);}//从下到上遍历“左边”for (int j=i+1; j<m-1-i; j++) {list.add(matrix[(m-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 },{ 16, 17, 18, 19, 20 },{ 21, 22, 23, 24, 25 }};List<Integer> resultList1 = spiralOrder(matrix);System.out.println(Arrays.toString(resultList1.toArray()));List<Integer> resultList2 = spiralOrder(matrix2);System.out.println(Arrays.toString(resultList2.toArray()));}
}

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

当遍历到最内层时,4个小循环并不会全都执行,比如测试代码中matrix2的最内层只有一个元素13,那么执行完第1个小循环,就不会再进入后面3个小循环:

更多精彩推荐
☞计算产业如何加速突破?鲲鹏开发者技术沙龙带来新答案☞从农场女孩到首位图灵奖女性获得者,回顾法兰西斯·艾伦的辉煌一生
☞华为澳大利亚大动作,终止4.9亿投资;iPhone 12 或10月13日发布;Swift正式登陆Win 10 | 极客头条
☞硅谷2020最新大数据学习路线:科学使用这一招,12周助你成为数据分析师
☞国产开源,GitHub 标星 47000+ ,百度飞桨从打响第一枪到战役突围
☞用以太坊承载的比特币,还只是起步阶段
点分享点点赞点在看

漫画:如何螺旋遍历二维数组?相关推荐

  1. 算法笔记-螺旋输出二维数组

    算法笔记-螺旋输出二维数组 1.思路:二维数组看做一个坐标,遍历者当成一个人,那么我们定义这个人的位置,以及当前面朝的方向,还有这个人转向次数.初始位置,人在(x,y)=(0,0)处,面向右方,右方的 ...

  2. 二维数组更改vue_使用vue中的v-for遍历二维数组的方法

    如下所示: {{itemss}} 其中,data数据为: this.data = [ [ { type: '', name: '资产', start: '期末余额', end: '期初余额' }, { ...

  3. C++知识点杂记1——typedef、static_cast、const_cast、遍历二维数组、聚合类

    1.typedef typedef一般是对某种类型的类型别名(不是变量别名) typedef double db;void mixtypename() {db d=1.2;cout<<d& ...

  4. 遍历二维数组_Java编程基础阶段笔记 day06 二维数组

    二维数组 笔记Notes 二维数组 二维数组声明 二维数组静态初始化与二位初始化 二维数组元素赋值与获取 二维数组遍历 二维数组内存解析 打印杨辉三角 Arrays工具类 数组中常见的异常 二维数组 ...

  5. 微信小程序遍历二维数组

    在微信小程序中遍历二维数组,代码如下 data 中二维数组结构如下 data: {familys:[{familyName:'贾家', users: [{name:'贾宝玉'},{name:'贾元春' ...

  6. 如何创建二维数组 微信小程序_微信小程序遍历二维数组

    在微信小程序中遍历二维数组,代码如下 data 中二维数组结构如下 data: { familys:[ { familyName:'贾家', users: [ {name:'贾宝玉'}, {name: ...

  7. c语言二维数组行优先如何访问快,C/C++遍历二维数组,列优先(column-major)比行优先(row-major)慢,why?...

    C/C++遍历二维数组,列优先(column-major)比行优先(row-major)慢,why? 简单粗暴的答案:存在Cache机制! 稍微啰嗦一点:CPU访问内存(读/写,遍历数组的话主要是读) ...

  8. python中遍历二维数组_python遍历二维数组-女性时尚流行美容健康娱乐mv-ida网

    女性时尚流行美容健康娱乐mv-ida网 mvida时尚娱乐网 首页 美容 护肤 化妆技巧 发型 服饰 健康 情感 美体 美食 娱乐 明星八卦 首页  > 高级搜索 二 维 数组 5.2.1 二 ...

  9. c语言对用下标法二维数组遍历,二维数组遍历:下标法与指针法的较量

    在图像的采集中,常常需要用到二维数组,这里数组的遍历是指按照一定的顺序访问数组中所有的元素. 在众多的遍历方法中,下标法和指针法是两种常用的方法.但在使用的时候,我们只需要选择其中的一种,那么如何选择 ...

最新文章

  1. CNCF 官方大使张磊:什么是云原生?
  2. 记录kafka-flink bug
  3. Teams的Incoming Webhook
  4. 公文写作与计算机应用,德阳市事业单位《计算机应用和公文写作》真题.doc
  5. 随想录(从技术到业务的转变)
  6. 面试题:什么叫2B树
  7. 打印工资条怎么做到每个人都有表头明细_快速制作工资条的方法
  8. 郝斌_数据结构入门笔记
  9. pta mysql训练题集 (221-240)
  10. 【数据仓库】企业Spark案例--酒店数据分析实战
  11. HTTP协议中状态码的含义
  12. 【面试题】计算机网络常见面试题
  13. Python读取键盘输入到一维列表及二维列表
  14. json 大括号 转意_json字符串中的大括号转义传到后台_JSON 序列化中的转义和 Unicode 编码...
  15. MT6582 KK版本加入modem
  16. win10无法识别linux硬盘,win10硬盘不能识别怎么办_win10硬盘不能识别解决办法_飞翔教程...
  17. 极速飞车无限狂飙服务器,《极速飞车 无限狂飙》
  18. Python3 多线程threading处理xlsx/csv数据
  19. ubuntu 18.04 crontab 设置自动开关机
  20. 《程序员职场第一课》配套课程大纲、免费视频、免费PPT下载地址(包括全部21讲)

热门文章

  1. SAP MM 中级之事务代码MICN的相关逻辑
  2. 民营企业的项目,真的很难做
  3. 天上掉馅饼,我被砸中了!
  4. 为什么人工智能被过度炒作?
  5. 机器学习——线性回归的原理,推导过程,源码,评价
  6. 工业机器人的下一个竞争焦点已经非常明确:通用人工智能(AGI)
  7. 干货丨从概念到实践,我们该如何构建自动微分库
  8. 深度丨三份研究报告,聚焦 AI 的三大主要话题
  9. 《用Python进行自然语言处理》第 1 章 语言处理与 Python
  10. itertools中常用的工具(chain,islice)