1 import java.util.ArrayList;
2 public class Solution {
3 public ArrayList<Integer> printMatrix(int [][] matrix) {
4 ArrayList<Integer> ai = new ArrayList<Integer>();
5 int rows = matrix.length;//矩阵的行 数
6 if(rows == 0)
7 return ai;
8 int cols = matrix[0].length;//矩阵的列数
9 if(cols == 0)
10 return ai;
11 //层数是以最短边的对角线为基准的,比如(0,0),(1,1)...,只取一半。
12 //之所以-1和+1当对角线元素个数为基数时候,会出现个0.5层,需要进为1
13 int layers = (Math.min(rows,cols)-1)/2+1;//这个是层数
14 for(int i = 0; i < layers; i++){
15 //从左到右打印
16 for(int j=i; j<cols-i; j++) ai.add(matrix[i][j]);
17 //从右上到右下打印
18 for(int k=i+1;k<rows-i; k++) ai.add(matrix[k][cols-i-1]);
19 //从右下到左下打印
20 for(int m=cols-i-2;(m>=i)&&(rows-i-1!=i);m--) ai.add(matrix[rows-i-1][m]);
21 //从左下到左上打印
22 for(int w=rows-i-2;(w>i)&&(cols-i-1!=i);w--) ai.add(matrix[w][i]);
23 }
24 return ai;
25 }
26 }