博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
顺时针打印矩阵
阅读量:5323 次
发布时间:2019-06-14

本文共 1531 字,大约阅读时间需要 5 分钟。

题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10。

我的想法是:每当将一行的所有元素都访问过,就将最小行(minRow)加一(访问完当前最小行的每一个元素),或者将最大行(maxRow)减一(访问完当前最大行的每一个元素)。每当将一列的所有元素都访问过,就将最大列(maxCol)减一(访问完当前最大列的每一个元素),或者最小列(minCol)加一(访问完当前最小列的每一个元素)。而每一次的顺时针访问就是将minRow、maxCol、maxRow、minCol 依次加一、减一、减一、加一。这样循环访问,当访问的个数是矩阵的个数的时候,说明已经将矩阵的所有元素都访问过一遍了。

代码如下:

public ArrayList
printMatrix(int [][] matrix) { if (matrix == null) return null; int minRow = 0, minCol = 0; //最小行, 最小列 int maxRow = matrix.length - 1; //最大行 int maxCol = matrix[0].length - 1; //最大列 int i = 0, j = 0; //i表示行, j表示列 int count = matrix.length * matrix[0].length; ArrayList
arrayList = new ArrayList<>(); while (arrayList.size() < count) { while (j <= maxCol && arrayList.size() < count) arrayList.add(matrix[i][j++]); minRow++; while (i <= maxRow && arrayList.size() < count) arrayList.add(matrix[i++][j]); maxCol--; while (j >= minCol && arrayList.size() < count) arrayList.add(matrix[i][j--]); maxRow--; while (i >= minRow && arrayList.size() < count) arrayList.add(matrix[i--][j]); minCol++; //加上最后一个 if (arrayList.size() == count-1) { arrayList.add(matrix[i][j]); } } return arrayList;}

 

转载于:https://www.cnblogs.com/yi-hui/p/8892683.html

你可能感兴趣的文章
套接口和I/O通信
查看>>
阿里巴巴面试之利用两个int值实现读写锁
查看>>
浅谈性能测试
查看>>
Winform 菜单和工具栏控件
查看>>
jequery动态创建form
查看>>
CDH版本大数据集群下搭建的Hue详细启动步骤(图文详解)
查看>>
巧用Win+R
查看>>
浅析原生js模仿addclass和removeclass
查看>>
Python中的greenlet包实现并发编程的入门教程
查看>>
java中遍历属性字段及值(常见方法)
查看>>
深入理解jQuery框架-框架结构
查看>>
YUI3自动加载树实现
查看>>
python知识思维导图
查看>>
当心JavaScript奇葩的逗号表达式
查看>>
App Store最新审核指南(2015年3月更新版)
查看>>
织梦MIP文章内容页图片适配百度MIP规范
查看>>
点击复制插件clipboard.js
查看>>
[Kali_BT]通过低版本SerialPort蓝牙渗透功能手机
查看>>
C语言学习总结(三) 复杂类型
查看>>
HNOI2018
查看>>