Это вопрос от Cracking the Coding Interview. В решении говорится, что программа поворачивает внешние края, а затем внутренние края. Однако у меня возникают проблемы с логикой обоих циклов.
Может кто-нибудь объяснить логику кода (например, почему они делают "layer < n/2" и четыре шага "left → top" и "bottom → left" и т.д.)? На стороне примечания, как бы один мыслил процесс, когда придумывал это во время собеседования?
Учитывая изображение, представленное матрицей NxN, где каждый пиксель в изображение составляет 4 байта, напишите способ поворота изображения на 90 градусов. Можете ли вы сделать это на месте?
public static void rotate(int[][] matrix, int n) {
for (int layer = 0; layer < n / 2; ++layer) {
int first = layer;
int last = n - 1 - layer;
for(int i = first; i < last; ++i) {
int offset = i - first;
int top = matrix[first][i]; // save top
// left -> top
matrix[first][i] = matrix[last-offset][first];
// bottom -> left
matrix[last-offset][first] = matrix[last][last - offset];
// right -> bottom
matrix[last][last - offset] = matrix[i][last];
// top -> right
matrix[i][last] = top; // right <- saved top
}
}
}