顺时针打印矩阵

  输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下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.



  
代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import java.util.ArrayList;

public class Solution {

public ArrayList<Integer> printMatrix(int[][] matrix) {
if(matrix==null || matrix.length==0) //非空判定
return null;

ArrayList<Integer> result = new ArrayList<Integer>();
printOuterRace(matrix, 0, 0, matrix.length-1, matrix[0].length-1, result);
return result;
}

//顺时针打印矩阵最外圈元素:右-->下-->左-->上
public void printOuterRace(int[][] matrix,int startRow,int startCol,int endRow,int endCol,ArrayList<Integer> result) {
if(startRow<endRow && startCol<endCol){ //(1)多行多列
for(int i=startCol; i<=endCol; i++) result.add(matrix[startRow][i]); //向右输出首行
for(int i=startRow+1; i<=endRow-1; i++) result.add(matrix[i][endCol]); //向下输出尾列
for(int i=endCol; i>=startCol; i--) result.add(matrix[endRow][i]); //向左输出尾行
for(int i=endRow-1; i>=startRow+1; i--) result.add(matrix[i][startCol]); //向上输出首列

printOuterRace(matrix,startRow+1,startCol+1,endRow-1,endCol-1,result); //继续打印下一圈元素
}
else if(startRow==endRow && startCol<endCol){ //(2)就一行
for(int i=startCol; i<=endCol; i++) result.add(matrix[startRow][i]);
}
else if(startRow<endRow && startCol==endCol){ //(3)就一列
for(int i=startRow; i<=endRow; i++) result.add(matrix[i][startCol]);
}
else if(startRow==endRow && startCol==endCol){ //(4)就一个元素
result.add(matrix[startRow][startCol]);
}
else //(5)角标越界
return;
}
}

---------------- The End ----------------
0%