import java.util.ArrayList;
public class Solution {
public ArrayList printMatrix(int [][] matrix) {
ArrayList li=new ArrayList();
int row=matrix.length;
int column =matrix[0].length;
int startRow=0,endRow=row-1;
int startCulumn=0,endCulumn=column-1;
//数组为空,直接返回
if(row==0)
return li;
//不管行列谁的条件不成立,必须退出循环大家想取出最大的圈(不要考虑次大的圈),然后改变参数,取出次大的圈,后面依次类推
while(startRow<=endRow&&startCulumn<=endCulumn){
//从左到右,最容易理解
for(int i=startCulumn;i<=endCulumn;i++)
li.add(matrix[startRow][i]);
// 从上到下,因为第starRow行己经遍历完,所以从上往下时,startRow必须+1
for(int i=startRow+1;i<=endRow;i++)
li.add(matrix[i][endCulumn]);
//从右到左 endCulumn列已经遍历完,所以endCulumn-1,必须加一个条件,startRow
for(int i=endCulumn-1;i>=startCulumn&&startRow
li.add(matrix[endRow][i]);
//从右到左 endCulumn列已经遍历完,所以endCulumn-1,必须加一个条件,startRow
for(int i=endRow-1;i>startRow&&endCulumn>startCulumn;i--)
li.add(matrix[i][startCulumn]);
startRow++;
startCulumn++;
endRow--;
endCulumn--;
}
return li;
}
}