题目描述
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
示例 1:
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,3,6,9,8,7,4,5]
示例 2:
输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
输出:[1,2,3,4,8,12,11,10,9,5,6,7]
代码实现
public static void main(String[] args) {
int[][] matrix = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
int[] ints = spiralOrder(matrix);
for (int i = 0; i < ints.length; i++) {
System.out.print(ints[i] + " ");
}
}
public static int[] spiralOrder(int[][] matrix) {
if (matrix == null) {
return null;
}
//对应第一行第一列下标
int tR = 0;
int tC = 0;
//对应最后一行最后一列下标
int dR = matrix.length - 1;
int dC = matrix[0].length - 1;
int[] result = new int[matrix.length * matrix[0].length];
int index = 0;
while (tR <= dR && tC <= dC) {
index = printMatrix(matrix, tR++, tC++, dR--, dC--, result, index);
}
return result;
}
private static int printMatrix(int[][] matrix, int tR, int tC, int dR, int dC, int[] result, int index) {
if (tR == dR) {
//只有一行的情况
for (int i = tC; i <= dC; i++) {
result[index++] = matrix[tR][i];
}
} else if (tC == dC) {
//只有一列的情况
for (int i = tR; i <= dR; i++) {
result[index++] = matrix[i][tC];
}
} else {
// 遵守 矩阵打印规则
int curC = tC;
int curR = tR;
while (curC != dC) {
result[index++] = matrix[tR][curC];
curC++;
}
while (curR != dR) {
result[index++] = matrix[curR][dC];
curR++;
}
while (curC != tC) {
result[index++] = matrix[dR][curC];
curC--;
}
while (curR != tR) {
result[index++] = matrix[curR][tC];
curR--;
}
}
return index;
}