【发布时间】:2019-11-05 06:00:08
【问题描述】:
我正在尝试解决《Cracking the Coding Interview》一书中的问题。其中一个问题要求我将矩阵顺时针旋转 90 度。现在,在巩固对矩阵旋转的理解的同时,我尝试着手解决一个新问题:尝试将矩阵逆时针(另一个方向)旋转 90 度。
我尝试遍历方矩阵的层,即外层,一直迭代到内层,并一个一个地旋转“正方形”每一侧的所有索引。这基本上是 Gayle Laakman McDowell 的解决方案所实现的,但方向相反。
public static void rotateMatrix(int[][] matrix) {
if (matrix.length == 0) {
return;
}
for (int i = 0; i < matrix.length / 2; i++) {
int top = i;
int bottom = matrix.length - 1 - i;
for (int j = top; j < bottom; j++) {
int temp = matrix[top][j];
matrix[top][j] = matrix[j][matrix.length - 1 - j];
matrix[j][matrix.length - 1 - j] = matrix[bottom][j];
matrix[bottom][j] = matrix[j][matrix.length - 1 - bottom];
matrix[j][matrix.length - 1 - bottom] = temp;
}
}
}
我期待一个样本矩阵的结果
[1,2,3]
[4,5,6]
[7,8,9]
成为
[3,6,9]
[2,5,8]
[1,4,7]
但我的代码导致
[1,5,7]
[2,8,6]
[3,4,9]
我的代码中的缺陷/差异在哪里?
【问题讨论】:
标签: java arrays matrix multidimensional-array rotation