题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
例如:如果输入如下矩阵:
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> 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]);
-
}
-
}
-