题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
例如:如果输入如下矩阵:1 2 3 4
5 6 7 8
9 10 11 1213 14 15 16
则依次打印出数字:1、2、3、4、8、12、16、15、14、13、9、5、6、7、11、10。
思路如下:
算法如下:
[java] view plain copy 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]); } }