輸入一個矩陣,按照從外向裏以順時針的順序依次打印出每個數字,

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

相關文章
相關標籤/搜索