题目:输入一个矩阵,按照从外到里以顺时针的顺序依次打印出每一个数字,例如,若果输入如下的4*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.
思路:该问题最直接的思路即按照矩阵几何上的分布进行数值的遍历,即按照顺时针的顺序依次遍历,到达一个顶点则转弯。
特殊情况:首先判断是否是单行或者单列矩阵,如果是这种情况,则直接进行矩阵的输出。
1 import java.util.ArrayList; 2 public class Solution { 3 ArrayList a = new ArrayList();//新建数组,便于存储结果 4 public ArrayList<Integer> printMatrix(int [][] matrix) { 5 int tR = 0; 6 int tC = 0; 7 int dR = matrix.length - 1;//行数 8 int dC = matrix[0].length - 1;//列数 9 while(tR<=dR&&tC<=dC) 10 print(matrix,tR++,tC++,dR--,dC--); 11 return a; 12 } 13 public void print(int[][] m,int tR,int tC,int dR,int dC){ 14 if(dR==tR){//只有一横行,打印即可 15 for(int i = tC;i<=dC;i++){ 16 a.add(m[tR][i]); 17 } 18 } 19 else if(dC == tC){ 20 for(int i = tR;i<=dR;i++ ){ 21 a.add(m[i][tC]); 22 } 23 } 24 else{ 25 int curC = tC; 26 int curR = tR; 27 while(curC!=dC){//当前未到达最右端 28 a.add(m[tR][curC++]); 29 } 30 while(curR!=dR){//当前未到达最底端 31 a.add(m[curR++][dC]); 32 } 33 while(curC!=tC){//当前未到达最左端 34 a.add(m[dR][curC--]); 35 } 36 while(curR!=tR){//当前未到达最上端 37 a.add(m[curR--][tC]); 38 } 39 } 40 } 41 }