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