Questa è una domanda da Cracking the Coding Interview. La soluzione dice che il programma ruota i bordi esterni, quindi i bordi interni. Tuttavia, ho problemi a seguire la logica di entrambi i cicli for.Rotazione di una matrice NxN in Java
Qualcuno potrebbe spiegare la logica del codice (ad esempio perché "strato < n/2" ei quattro passaggi di "sinistra -> alto" e "in basso -> lasciato" ecc.)? In una nota a margine, come sarebbe il processo di pensiero di una persona quando si presentasse questo durante un'intervista di codifica?
Data un'immagine rappresentata da una matrice NxN, dove ogni pixel dell'immagine è 4 byte, scrivere un metodo per ruotare l'immagine di 90 gradi. Puoi farlo a posto?
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
}
}
}
Grazie per la rapida risposta, la tua spiegazione è molto apprezzata. Mi scuso se questa domanda è semplicistica, ma non riuscivo a capire su una scala più ampia cosa fossero "left", "right", "top" e "bottom" e che cosa fosse un "layer". La sinistra, la destra, la cima, il fondo sarebbero solo i pezzi d'angolo? Ogni strato dovrebbe essere solo un bordo del quadrato che va verso l'interno? – JGY
Modificherò la mia risposta ... – Jason
@Jason Grazie per la spiegazione. Non riesco a capire la logica dietro "int offset = i - first;" nel ciclo interno. – Ayusman