import java.util.ArrayList;java
public class Solution {数组
public ArrayList<Integer> printMatrix(int [][] matrix) { ArrayList <Integer> li=new ArrayList<Integer>(); 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<endRow,若是不加,假设是一行,就出现重复 for(int i=endCulumn-1;i>=startCulumn&&startRow<endRow;i--) li.add(matrix[endRow][i]); //从右到左 endCulumn列已经遍历完,因此endCulumn-1,必须加一个条件,startRow<endRow,若是不加,假设是一列,就出现重复 for(int i=endRow-1;i>startRow&&endCulumn>startCulumn;i--) li.add(matrix[i][startCulumn]); startRow++; startCulumn++; endRow--; endCulumn--; } return li; }
}code