题目描述
输入一个矩阵,按照从外向里以顺时针依次打印出每一个数字。
解题思路:
- 可以一圈一圈的打印,先打印最外层一圈,左上角坐标为(0, 0),再打印第二圈,左上角坐标为(1,1),以此类推。
- 如何判断打印完成了呢?只有符合数组长和宽 大于当前圈左上角坐标的2倍,说明需要继续打印。
- 打印一圈的时候,从左向右,从上到下,从有向左,再从下向上打印即可。
代码
void printMatrixClockwisely(int[][] matrix){
if (matrix == null) {
return;
}
if (matrix.length <= 0) {
return;
}
int start = 0; // 记录打印地几圈
while (start * 2 < matrix.length && start * 2 < matrix[0].length) {
//
printCircleInMatrix(matrix, start); // 打印第start圈
start ++;
}
}
// 打印矩阵中的一圈
void printCircleInMatrix(int[][] matrix, int start){
int endX = matrix[0].length - start - 1;
int endY = matrix.length - start - 1;
// 从左到右打印一行
for (int i = start; i <= endX; i++) {
System.out.println(matrix[start][i]);
}
// 从上到下打印一行, 注意不要重复打印
for (int i = start + 1; i <= endY; i++) {
System.out.println(matrix[i][endX]);
}
// 从有到左打印一行
for (int i = endX - 1; i >= start; i--) {
System.out.println(matrix[endY][i]);
}
// 从下到上打印一行
for (int i = endY - 1; i >= start + 1; i--) {
System.out.println(matrix[i][start]);
}
}