JZ29 顺时针打印矩阵
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵:
[[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]
public class Solution { public ArrayList<Integer> printMatrix(int [][] matrix) { ArrayList<Integer> res = new ArrayList<>(); if(matrix == null) return res; int rl = 0, rh = matrix.length-1; //记录待打印的矩阵上下边缘 int cl = 0, ch = matrix[0].length-1; //记录待打印的矩阵左右边缘 while(true){ for(int i = cl; i <= ch; i++) { res.add(matrix[rl][i]);//从左往右 } if(++rl > rh) break; //若超出边界,退出 for(int i=rl; i<=rh; i++) res.add(matrix[i][ch]);//从上往下 if(--ch < cl) break; for(int i=ch; i>=cl; i--) res.add(matrix[rh][i]);//从右往左 if(--rh < rl) break; for(int i=rh; i>=rl; i--) res.add(matrix[i][cl]);//从下往上 if(++cl > ch) break; } return res; } }