一、思路
给每个矩阵规定一个层数,如,四行四列的矩阵即为两层(外边一层12个元素,内层4个元素),三行三列的矩阵也是两层(外层8个元素,内层1个元素),具体代码实现可见代码区。有了层数之后问题就变成了每层的顺时针遍历,然后设一个循环一层一层进行遍历,就简单多了。
二、代码
public class 顺时针打印矩阵 {
/**
* 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵:
* 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.
*/
public static void main(String[] args) {
int[][] a = { { 1, 2, 3, 4 }, { 5, 6, 7, 8 }, { 9, 10, 11, 12 }, { 13, 14, 15, 16 } };
System.out.println(printMatrix(a));
}
public static ArrayList<Integer> printMatrix(int[][] array) {
ArrayList<Integer> list = new ArrayList<>();
int n = array.length;
int m = array[0].length;
/**
* 核心
*/
int c = (Math.min(n, m) - 1) / 2 + 1;// 层数
for (int i = 0; i < c; i++) {
for (int j = i; j < m - i; j++)// 左上到右上
list.add(array[i][j]);
for (int k = i + 1; k < n - i; k++)// 右上到右下
list.add(array[k][m - i - 1]);
for (int o = m - i - 1; o > i; o--)// 右下到左下
list.add(array[n - i - 1][o - 1]);
for (int p = n - i - 2; p > i; p--)// 左下到右上
list.add(array[p][i]);
}
return list;
}
}
参考文章: