题目描述(剑指Offer29)
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字
例如,如果输入如下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 Jzof29 {
public ArrayList<Integer> printMatrix(int [][] matrix) {
ArrayList<Integer> list = new ArrayList<Integer>();
//首先需要定义矩阵四个位置
int row1 = 0,row2 = matrix.length-1;
int col1 = 0,col2 = matrix[0].length -1;
while (row1 <= row2 && col1 <= col2){
//第一行
for (int i = col1; i <=col2 ; i++) {
list.add(matrix[row1][i]);
}
//右边第一列
for (int i = row1+1; i <=row2 ; i++) {
list.add(matrix[i][col2]);
}
//下面那一行,首先判断有没有下一行
if (row1 != row2){
for (int i = col2-1; i >= col1 ; i--) {
list.add(matrix[row2][i]);
}
}
//左边第一列,首先判断有没有这一列
if (col1 != col2){
for (int i = row2 - 1; i >= row1+1 ; i--) {
list.add(matrix[i][col1]);
}
}
row1++;
row2--;
col1++;
col2--;
}
return list;
}
}