该类题目需要从宏观的角度去考虑。
1.首先定义一个方法,给定左上角和右下角两个点,使用四个循环遍历输出矩阵外圈。注:需要考虑只包含一行和一列的情况。
2.确定矩阵的左上角和右下角,不断往里递进,调用步骤1中的方法打印当前矩阵的最外圈。
public static ArrayList<Integer> printMatrix(int [][] matrix) {
ArrayList<Integer> list = new ArrayList<Integer>();
int row1 = 0;
int col1 = 0;
int row2 = matrix.length - 1;
int col2 = matrix[0].length - 1;
while (row1 <= row2 && col1 <= col2) {
printLevel(list, matrix, row1++, col1++, row2--, col2--);
}
return list;
}
public static void printLevel(ArrayList<Integer> list, int[][] matrix,
int row1, int col1, int row2, int col2) {
if (row1 == row2) {
for (int i = col1; i <= col2; i++) {
list.add(matrix[row1][i]);
}
} else if (col1 == col2){
for (int i = row1; i <= row2; i++) {
list.add(matrix[i][col1]);
}
} else {
int curRow = row1;
int curCol = col1;
while (curCol < col2) {
list.add(matrix[curRow][curCol++]);
}
while (curRow < row2) {
list.add(matrix[curRow++][curCol]);
}
while (curCol > col1) {
list.add(matrix[curRow][curCol--]);
}
while (curRow > row1) {
list.add(matrix[curRow--][curCol]);
}
}
}
京公网安备 11010502036488号