《剑指Offer》Java实现--顺时针打印矩阵
2018-10-12 本文已影响14人
南湖Giser
题目描述
输入一个矩阵,按照从外向里顺时针的顺序打印出每一个数字。测试用例如下图:
测试数组
思路分析
这道题目并不难,关键在于边界控制!每一层遍历均从左上角开始,逐层往里完成遍历。
Java代码实现
/**
* 由外向内顺时针打印矩阵数组
* @author Administrator
* @version 2018/10/12
*/
public class Exe31_PrintMatrixClockWisely {
public static void main(String[] args) {
int[][] matrix={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16},{21,22,23,24}};
printMatrixClockWisely(matrix);
}
public static void printMatrixClockWisely(int[][] matrix) {
//参数合法性检查
if(matrix==null||matrix.length!=matrix[0].length){
throw new IllegalArgumentException();
}else {
int dimension=matrix.length;
int rowStart=0;
int colStart=0;
//分解工作,一圈一圈的打印
while(dimension>rowStart*2&&dimension>colStart*2){
printCircle(matrix, rowStart, colStart);
rowStart++;
colStart++;
}
}
}
private static void printCircle(int[][] matrix,int rowStart,int colStart) {
int dimension=matrix.length;
//从左向右打印
for(int i=colStart;i<dimension-colStart;i++){
System.out.print(matrix[rowStart][i]+" ");
}
//从上往下打印
for(int i=rowStart+1;i<dimension-rowStart;i++){
System.out.print(matrix[i][dimension-rowStart-1]+" ");
}
//从右往左打印
for(int i=dimension-colStart-2;i>colStart-1;i--){
System.out.print(matrix[dimension-rowStart-1][i]+" ");
}
//从下往上打印
for(int i=dimension-rowStart-2;i>rowStart;i--){
System.out.print(matrix[i][colStart]+" ");
}
System.out.println();
}
}