Para rotar una matriz a 90 grados en el lugar, debe ser una matriz cuadrada que tenga el mismo número de filas y columnas; de lo contrario, la solución en el lugar no es posible y requiere cambios en la fila / columna.
Es muy fácil resolver este problema si se comprende bien.
- Cómo prepararse para la entrevista como ingeniero senior en Google / Facebook / Apple / LinkedIn / Yahoo
- Instituto Nacional de Tecnología Motilal Nehru, Allahabad: ¿Por qué las empresas repiten preguntas sobre pruebas y entrevistas? ¿No es injusto y significa que cuanto más aprendas las preguntas del año anterior, más posibilidades tendrás de ser seleccionado?
- ¿Cuáles son las preguntas más frecuentes en ASP.NET en una entrevista?
- Cómo resolver la siguiente pregunta en Java: tengo dos listas vinculadas, que representan dos números: l1: 2-> 3-> 4, l2: 7-> 8; agregue estos dos números y almacene el resultado en l1, es decir, l1 debería convertirse en l1: 3-> 1-> 2
- ¿Qué crees que apesta más sobre las entrevistas de la industria de TI india?
Para rotar una matriz a 90 grados, comenzaremos a rotarla capa por capa.
Gire la primera capa externa 90 grados, Rote la 2da capa interna 90 grados, Gire la 3ra capa interna 90 grados y así sucesivamente,
Vamos a romper aún más el problema de rotar cada capa para rotar cada celda de la capa en 90 grados.
Comenzando desde la celda más a la izquierda de la capa 1, primero la rotaremos a 90 grados y nos moveremos a su posición correcta.
Elija la segunda celda de la capa 1 y gírela a 90 grados y muévala a su posición correcta y así sucesivamente.
Después de la primera iteración, la capa 1 se rotará completamente a 90 grados.
Ahora elija la capa 2 y repita el mismo proceso.
En cada iteración, estamos trabajando en una capa externa completa que consta de 2 filas
(Ejemplo: fila 0 y fila 4 para la capa 1)
Entonces, mientras codificamos debemos ocuparnos de esto y debemos iterar nuestro bucle externo de 0 a rowLength / 2 y no hasta rowLength.
for
(int
i = 0; i <= (length)/2; i++)
Para el bucle interno, debe comenzar desde donde comienza el bucle externo y disminuye la capa final en cada iteración porque en cada iteración, la pared izquierda y la pared derecha de la matriz se giran, por lo que no es necesario tocarla en la próxima iteración.
for
(int
j = i; j < length-i; j++) {
Primero recopilaremos datos de las 4 celdas que forman 90 grados y deben rotarse, luego lo cambiaremos a una ubicación de 90 grados.
Ejemplo: Mientras gira la primera celda de la Capa 1, debemos hacer las siguientes operaciones.
Los datos en la celda en (0,0) deben moverse a la celda (0,4).
Los datos en la celda en (0,4) deben moverse a la celda (4,4).
Los datos en la celda en (4,4) deben moverse a la celda (4,0).
Los datos en la celda en (4,0) deben moverse a la celda (0,0).
Elija la segunda celda de la Capa 1 e identifique la ubicación correspondiente de 90 grados de las 4 celdas e intercambie la ubicación.
Continuar la operación para todas las celdas de la capa 1.
Después de rotar la capa 1, debemos trabajar en la capa 2, pero antes de comenzar a trabajar en la capa 2,
necesitamos aumentar nuestra capa externa para comenzar desde la siguiente fila y la capa interna también para comenzar desde la siguiente fila y terminar en la filaLongitud-1 ya que la pared derecha de la matriz ya está rotada en la rotación de la capa 1.
Elija la capa 2 y repita el proceso.
public void rotateMatrixInplace (int [] [] matrix) { int longitud = matrix.length-1; for (int i = 0; i <= (length) / 2; i ++) { para (int j = i; j <longitud-i; j ++) { int temp = matriz [i] [j]; matriz [i] [j] = matriz [longitud-j] [i]; matriz [longitud-j] [i] = matriz [longitud-i] [longitud-j]; matriz [longitud-i] [longitud-j] = matriz [j] [longitud-i]; matriz [j] [longitud-i] = temp; } } }
Explicación detallada con el programa:
Gire la matriz N * N 90 grados en sentido horario Inplace
Gire la matriz N * M 90 grados