题目描述
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵:
1 2 3 4
5 6 7 8
9 10 11 1
2
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) {
if (matrix == null)
return null;
ArrayList<Integer> result = new ArrayList<Integer>();
int start = 0;
while(matrix[0].length > start *2 && matrix.length > start *2){
printMatrixInCircle(matrix,result,start);
start++;
}
return result;
}
public static void printMatrixInCircle(int [][]matix,ArrayList<Integer>result,int start){
int endX = matix[0].length - start -1;
int endY = matix.length - start -1;
//从左向右打印一行
for(int i = start;i <=endX;i++){
result.add(matix[start][i]);
}
//从上到下
for(int i = start+1; i <=endY;i++)
result.add(matix[i][endX]);
//从右到左
if(start < endX &&start < endY)
for(int i = endX -1;i>= start;i--)
result.add(matix[endY][i]);
//从下到上
if(start < endX && start < endY-1)
for(int i = endY - 1;i >=start+1;i--)
result.add(matix[i][start]);
}
}