题目:
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 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; int rows = matrix.length; if(rows <= 0) return null; int columns = matrix[0].length; ArrayList<Integer> ret = new ArrayList<Integer>(); int start = 0; while(rows > start * 2 && columns > start * 2) { per(ret, matrix, rows, columns, start); start ++; } return ret; } public void per(ArrayList<Integer> list, int[][] matrix, int rows, int columns, int start) { int endR = columns - start - 1; int endC = rows - start - 1; //打印上面一行 for(int i=start; i<=endR; i++) { list.add(matrix[start][i]); } //打印右边一列 if(start < endC) for(int i=start+1; i<=endC; i++) { list.add(matrix[i][endR]); } //打印下面一行 if(start < endR && start < endC) for(int i=endR-1; i>=start; i--) { list.add(matrix[endC][i]); } //打印左边一列 if(start < endR && start < endC - 1) for(int i=endC-1; i>=start+1; i--) { list.add(matrix[i][start]); } } }