目录
矩阵问题
问题一:转圈打印矩阵
给定一个整型矩阵matrix,请按照转圈的方式打印它。
要求:额外空间复杂度为O(1)。
例如:
[ 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
本题可以在 LeetCode 54 螺旋矩阵测试结果。
思路
定义一个方法,以左上角的点和右下角的点开始,从边界开始打印矩形。打印一圈后循环遍历内圈的矩形,直到整个矩形打印完毕。有一些特殊的情况,比如打印的是一条竖线,或者横线,或者一个点,都没有关系,注意代码的边界即可。
实现
public static void spiralOrderPrint(int[][] matrix, int tR, int tC, int dR, int dC) {
//三种情况:横线,竖线,矩形
if (tR == dR) {
for (int i = tC; i <= dC; i++) {
System.out.printf("%3d", matrix[tR][i]);
}
} else if (tC == dC) {
for (int i = tR; i <= dR; i++) {
System.out.printf("%3d", matrix[i][tC]);
}
} else {
int tmpC = tC;
int tmpR = tR;
while (tmpC < dC) {
System.out.printf("%3d", matrix[tR][tmpC++]);
}
while (tmpR < dR) {
System.out.printf("%3d", matrix[tmpR++][dC]);
}
while (tC < tmpC) {
System.out.printf("%3d", matrix[dR][tmpC--]);
}
while (tR < tmpR) {
System.out.printf("%3d", matrix[tmpR--][tC]);
}
}
}
public static void printMatrix(int[][] matrix) {
System.out.println("-----------PrintMatrixInSpiralOrder.printMatrix-----------");
int tR = 0;
int tC = 0;
int dR = matrix.length - 1;
int dC = matrix[0].length - 1;
//横线,竖线等特殊形式都囊括在内
while (tR <= dR && tC <= dC) {<