题目描述
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> printMatrix(int [][] matrix) {
ArrayList<Integer> list=new ArrayList<Integer>();
read(matrix,list,0);
return list;
}
public void read(int [][] matrix,ArrayList list,int start){
int row=matrix.length;
int col=matrix[0].length;
if( matrix==null || col < 1 || row < 1 || start < 0 )
return;
if( col <= 2*start || row <= 2*start )
return;
int stopX = col - 1 - start;//一圈最右列在坐标中的位置
int stopY = row - 1 - start;//一圈最大行在坐标中位置
//打印此圈中的最上行
for( int i=start; i<=stopX; i++)
list.add(matrix[start][i]);
//打印此圈中的最右列
if(start <= stopX) //如果此圈中至少有一列
for(int i=start+1; i<=stopY; i++)
list.add(matrix[i][stopX]);
//打印次圈中的最下行
if(start < stopX && start < stopY)
for(int i=stopX-1; i >= start; i--)
list.add(matrix[stopY][i]);
//打印次圈中的最左行
if(start < stopX && start < stopY - 1)
for(int i=stopY-1; i >= start+1; i--)
list.add(matrix[i][start]);
read(matrix,list,start+1);
}
}