/**
* @Author: Allen
* @Version:v1.00
* @CreateData:2018年4月2日 上午9:31:45
*输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,
*例如,如果输入如下矩阵:
*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) {
if(matrix==null){
return null;
}
ArrayList<Integer> list=new ArrayList<Integer>();
int rows = matrix.length;
int colums = matrix[0].length;
int start=0;
while(colums>start*2 && rows > start*2){
list.addAll(printMatrixInCircle(matrix,rows,colums,start));
start++;
}
return list;
}
private ArrayList<Integer> printMatrixInCircle(int [][] matrix,int rows, int colums,int start){
ArrayList<Integer> list = new ArrayList<Integer>();
int endX=colums-start-1;
int endY=rows-start-1;
//1.从左向右打印一行
for(int i=start; i<=endX; i++){
Integer num=matrix[start][i];
list.add(num);
}
//2.从上到下打印一列
if(endY>start){
for(int i=start+1; i<=endY; i++){
Integer num = matrix[i][endX];
list.add(num);
}
}
//3.从右到左打印一行
if(endY>start && endX>start){
for(int i=endX-1; i>=start; i--){
Integer num = matrix[endY][i];
list.add(num);
}
}
//4.从下到上打印一列
if(endY-1>start && endX>start){
for(int i=endY-1; i > start; i--){
Integer num = matrix[i][start];
list.add(num);
}
}
return list;
}
}