【剑指offer】顺时针打印矩阵
来源:互联网 发布:mac 购买icloud空间 编辑:程序博客网 时间:2024/05/22 03:09
主要思想是递归打印最外面一圈,打印每一圈时按照顺时针方法,先顶部从左至右,然后右边从上至下,然后底部从右至左,最后左边从下至上。
思路简单,但是实现起来困难,主要是打印次数的判断,以及矩阵只有一行或只有一列或只有一个数时的判断条件。
结论:
1、每圈起始坐标行号和列号总是相等的,继续打印一圈的条件是总行数大于2*start并且总列数大于2*start。
2、顶部的一行总是需要打印的。
3、至少有两行时才可以打印右边一列,也就是行号小于endY。
4、至少两行两列时才打可以打印底部一行,也就是行号小于endY并且列号小于endX。
5、至少有三行两列时才可以打印左边一列,也就是行号小于endY-1并且列号小于endX。
public static ArrayList<Integer> printOuter(int[][] matrix){ if(matrix==null) return null; int row=matrix.length; if(row<=0) return null; int col=matrix[0].length; if(col<=0) return null; ArrayList<Integer> list=new ArrayList<Integer>(); int start=0; while(row>2*start&&col>2*start){ int endX=col-1-start; int endY=row-1-start; for(int i=start;i<=endX;i++){ list.add(matrix[start][i]); } if(start<endY){ for(int i=start+1;i<=endY;i++){ list.add(matrix[i][endX]); } } if(start<endX&&start<endY){ for(int i=endX-1;i>=start;i--){ list.add(matrix[endY][i]); } } if(start<endX&&start<endY-1){ for(int i=endY-1;i>start;i--){ list.add(matrix[i][start]); } } start++; } return list; }
0 0
- 【剑指offer】顺时针打印矩阵
- 剑指offer--顺时针打印矩阵
- 剑指offer--顺时针打印矩阵
- 剑指offer 顺时针打印矩阵
- 剑指offer:顺时针打印矩阵
- 《剑指offer》顺时针打印矩阵
- 剑指offer-顺时针打印矩阵
- 剑指offer 顺时针打印矩阵
- 剑指offer:顺时针打印矩阵
- 剑指offer-顺时针打印矩阵
- 剑指offer 顺时针打印矩阵
- 剑指offer:顺时针打印矩阵
- [剑指offer]顺时针打印矩阵
- 《剑指offer》-顺时针打印矩阵
- 【剑指offer】顺时针打印矩阵
- 剑指offer|顺时针打印矩阵
- 《剑指offer》顺时针打印矩阵
- 剑指Offer:顺时针打印矩阵
- 慢查询定位
- 一种根据关键字进行分类的文本分类算法
- 最详细的 Android Toolbar 开发实践总结
- 微信群发接口 开发的各种问题
- 【Android图像处理】宝石蓝滤镜(效果)
- 【剑指offer】顺时针打印矩阵
- scss笔记
- Java 并发编程实战
- oracle12c新特性(3)-不可见字段
- MySql数据库安装
- 在Windows下的Python与OpenCV安装调试
- android6.0动态权限的设置——几行代码搞定
- git远程推送,远程克隆
- RMAN 备份与恢复 实例 ——MD,没看懂,留着日