我们可以按照递归的思路来进行,每次打印矩阵的外圈,然后剩下的内部的小矩阵重复这个过程。
ArrayList<Integer> res = new ArrayList<>(); int[][] Matrix; public ArrayList<Integer> printMatrix(int [][] matrix) { Matrix = matrix; int row = matrix.length; if(row == 0) return res; int col = matrix[0].length; helper(0,0,row-1,col-1); return res; } private void helper(int i1,int j1,int i2,int j2) { if(i2 < i1 || j2 < j1) return; for(int i = j1;i <= j2;i++) res.add(Matrix[i1][i]); for(int i = i1+1;i <= i2-1;i++) res.add(Matrix[i][j2]); if(i2 != i1) for(int i = j2;i >= j1;i--) res.add(Matrix[i2][i]); for(int i = i2-1;i >= i1+1;i--) res.add(Matrix[i][j1]); helper(i1+1,j1+1,i2-1,j2-1); }