内容简介:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。每次打印都是打印外面的一圈,每次打印矩阵的起点横纵坐标都相同(横纵坐标值均设置为start),其余三个角的坐标都与start有关。对于start而言,start*2的值小于行数和列数时才需要继续打印。
文章目录
- 面试题29:顺时针打印矩阵
面试题29:顺时针打印矩阵
一、题目描述
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
比如:输入以下矩阵
打印出的数字为1 2 3 4 8 12 16 15 14 13 9 5 6 7 11 10
二、问题分析
每次打印都是打印外面的一圈,每次打印矩阵的起点横纵坐标都相同(横纵坐标值均设置为start),其余三个角的坐标都与start有关。
对于start而言,start*2的值小于行数和列数时才需要继续打印。
这样一分析,发现整个数学模型都建立起来了。
三、问题解答
public void printMatrix(int[][] matrix) { if(matrix==null || matrix.length<=0) { return; } printMatrixInCircle(matrix, 0); } private void printMatrixInCircle(int[][] matrix,int start) { int row=matrix.length; int col=matrix[0].length; int endX=col-1-start; int endY=row-1-start; if(endX<start || endY<start) { return; } //仅一行 if(endY==start) { for(int i=start;i<=endX;i++) { System.out.print(matrix[start][i]+" "); } return; //记得结束 } //仅一列 if(endX==start) { for(int i=start;i<=endY;i++) { System.out.print(matrix[i][start]+" "); } return; //记得结束 } //打印边界 for(int i=start;i<=endX;i++) { System.out.print(matrix[start][i]+" "); } for(int i=start+1;i<=endY;i++) { System.out.print(matrix[i][endX]+" "); } for(int i=endX-1;i>=start;i--) { System.out.print(matrix[endY][i]+" "); } for(int i=endY-1;i>=start+1;i--) { System.out.print(matrix[i][start]+" "); } //继续打印更内部的矩阵,令start+1 printMatrixInCircle(matrix, start+1); }
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
逆向工程核心原理
[韩] 李承远 / 武传海 / 人民邮电出版社 / 2014-4-25 / 109.00元
本书十分详尽地介绍了代码逆向分析的核心原理。作者在Ahnlab 研究所工作多年,书中不仅包括其以此经验为基础亲自编写的大量代码,还包含了逆向工程研究人员必须了解的各种技术和技巧。彻底理解并切实掌握逆向工程这门技术,就能在众多IT 相关领域进行拓展运用,这本书就是通向逆向工程大门的捷径。 想成为逆向工程研究员的读者或正在从事逆向开发工作的开发人员一定会通过本书获得很大帮助。同时,想成为安全领域......一起来看看 《逆向工程核心原理》 这本书的介绍吧!