Это вопрос от Cracking the Coding Interview. В решении говорится, что программа поворачивает внешние края, а затем внутренние края. Однако у меня возникают проблемы с логикой обоих циклов.Вращение матрицы NxN в Java
Может ли кто-нибудь объяснить логику кода (например, почему они это делают) слой < 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
}
}
}
Благодарим за быстрый ответ в течение, ваше объяснение с пониманием. Я прошу прощения, если этот вопрос является упрощенным, но у меня возникли проблемы с пониманием в более широком масштабе того, что состоит из «левого», «правильного», «верхнего» и «нижнего», и из чего состоит «слой». Будут ли левые, правые, верхние, нижние только угловые части? Каждый слой будет только границей квадрата, идущего внутрь? – JGY
Я отредактирую свой ответ ... – Jason
@ Джейсон Спасибо за объяснение. Я не могу понять логику «int offset = i - first;» во внутреннем цикле. – Ayusman