输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每个数字,

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

相关文章
相关标签/搜索