Я пытаюсь разобраться с проблемами в книге «Взлом кодирования».Один из вопросов просит меня повернуть матрицу на 90 градусов по часовой стрелке.Теперь, пытаясь укрепить мое понимание вращения матрицы, я попытался встать перед новой проблемой: попытаться повернуть матрицу на 90 градусов против часовой стрелки (в другом направлении).
Я пытался пройти через слои квадратной матрицы, внешний слой, повторив весь путь до внутреннего слоя и поворачивая все индексы каждой стороны "квадрата" один за другим.Это в основном то, что реализовало решение Гейл Лакман Макдауэлл, но в другом направлении.
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]]
.Где в моем коде ошибка / расхождение?