021 顺时针打印矩阵

1.题目

  输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。

2.分析

  每次打印矩阵最外面的一圈(用方法printMatrixInCircle()表示),每次都是这个操作,所以可以采用递归。每次打印矩阵的左上角的横纵坐标相同,即为start,而其余三个角的坐标都与行列数以及start有关,因此只需要for循环即可实现打印。

  当然,其实只要针对start进行循环判断,start*2的值小于行数和列数时才需要继续打印,这样,通过这个条件,可以用循环来打印每次的最外圈矩阵。

3.程序

 1 package first;
 2 
 3 public class PrintMatrix {
 4     public void printMatrix(int[][] matrix) {
 5         if(matrix==null || matrix.length<=0)
 6             return;
 7         printMatrixInCircle(matrix, 0);
 8     }
 9 
10     private void printMatrixInCircle(int[][] matrix,int start) {
11         int row=matrix.length;
12         int col=matrix[0].length;
13         int endX=col-1-start;
14         int endY=row-1-start;
15         if(endX<start || endY<start)
16             return;
17         //仅一行
18         if(endY==start) {
19             for(int i=start;i<=endX;i++) {
20                 System.out.print(matrix[start][i]+" ");
21             }
22             return;  //记得结束
23         }
24         //仅一列
25         if(endX==start) {
26             for(int i=start;i<=endY;i++) {
27                 System.out.print(matrix[i][start]+" ");
28             }
29             return;  //记得结束
30         }
31 
32         //打印边界
33         for(int i=start;i<=endX;i++) {
34             System.out.print(matrix[start][i]+" ");
35         }
36         for(int i=start+1;i<=endY;i++) {
37             System.out.print(matrix[i][endX]+" ");
38         }
39         for(int i=endX-1;i>=start;i--) {
40             System.out.print(matrix[endY][i]+" ");
41         }
42         for(int i=endY-1;i>=start+1;i--) {
43             System.out.print(matrix[i][start]+" ");
44         }
45 
46         //继续打印更内部的矩阵,令start+1
47         printMatrixInCircle(matrix, start+1);
48     }
49 
50 
51     public static void main(String[] args) {
52         PrintMatrix demo = new PrintMatrix();
53         int[][] a= {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
54 //      int[][] a= {};
55 //      int[][] a= {{}};
56 //      int[][] a= {{1}};
57 //      int[][] a= {{1,2,3,4}};
58 //      int[][] a= {{1},{2},{3},{4}};
59 //      int[][] a= {{1,2,3},{4,5,6}};
60 //      int[][] a=null;
61         demo.printMatrix(a);
62     }
63 }
原文地址:https://www.cnblogs.com/juncaoit/p/10496075.html