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 }