顺时针打印矩阵

问题:

  输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 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.

分析:

  (1)使用数组的元素总数控制最外层循环,没打印一个总数减1。当总数为0时退出最外层循环

  (2)每一次顺时针打印,分为上、右,下、左。设置count表示顺时针的次数,同时控制打印的边界;设置i , j 表示打印位置,内循环没打印一次需要调整i , j的值为下一个内循环的起止位置,避免数组越界和重复打印。

code:

 1 public ArrayList<Integer> printMatrix(int [][] matrix) {
 2         ArrayList<Integer> list = new ArrayList<Integer>();
 3         int x = matrix.length;
 4         int y = matrix[0].length;
 5         int total = x*y;
 6         int i=0,j=0;    //i控制横轴,j控制纵轴
 7         int count=0;    //记录旋转次数。
 8         while(total>0) {
 9             //
10             while(total>0 &&j<(y-count) ) {
11                 list.add(matrix[i][j]);
12                 j++;
13                 total--;
14             }
15             j--;
16             i++;
17             //
18             while(total>0 && i<(x-count)) {
19                 list.add(matrix[i][j]);
20                 i++;
21                 total--;
22             }
23             i--;
24             j--;
25             //
26             while(total>0 && j>=count) {
27                 list.add(matrix[i][j]);
28                 j--;
29                 total--;
30             }
31             j++;
32             i--;
33             //左:为了重复打印,所以i>count
34             while(total>0 && i>count) {
35                 list.add(matrix[i][j]);
36                 i--;
37                 total--;
38             }
39             i++;
40             j++;
41             count++;
42             
43             
44         }
45         return list;
46     }
原文地址:https://www.cnblogs.com/dream-flying/p/12893149.html