题目
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下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.
分析
矩阵分圈处理!即一圈一圈的打印
注意: 分圈处理时,需要考虑只有一行或一列的边界条件
代码实现
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> printMatrix(int [][] matrix) {
//矩阵分圈处理
int beginRow = 0;
int beginCol = 0;
int endRow = matrix.length - 1;
int endCol = matrix[0].length - 1;
ArrayList<Integer> res = new ArrayList<>();
while(beginRow <= endRow && beginCol <= endCol){
printInCircle(matrix, beginRow++,beginCol++,endRow--,endCol--,res);
}
return res;
}
public void printInCircle(int[][] m, int bR,int bC, int eR, int eC,ArrayList<Integer> tmp){
if(bR == eR){ // 若只有一行
for(int i = bC; i <= eC; i++){
tmp.add(m[bR][i]);
}
}else if(bC == eC){ //若只有一列
for(int i = bR; i <= eR; i++){
tmp.add(m[i][bC]);
}
}else{
for(int i = bC; i < eC; i++){
tmp.add(m[bR][i]);
}
for(int i = bR; i < eR; i++){
tmp.add(m[i][eC]);
}
for(int i = eC; i > bC; i--){
tmp.add(m[eR][i]);
}
for(int i = eR; i > bR; i--){
tmp.add(m[i][bC]);
}
}
return;
}
}