Programa Javascript para rotar una array 180 grados

Dada una array cuadrada, la tarea es que la giremos 180 grados en sentido contrario a las agujas del reloj sin usar ningún espacio extra. 

Ejemplos: 

Input :  1  2  3
         4  5  6
         7  8  9
Output : 9 8 7 
         6 5 4 
         3 2 1

Input :  1 2 3 4 
         5 6 7 8 
         9 0 1 2 
         3 4 5 6 
Output : 6 5 4 3 
         2 1 0 9 
         8 7 6 5 
         4 3 2 1

Método: 1 (Solo imprime array rotada) 
La solución a este problema es que para rotar una array 180 grados podemos seguir fácilmente ese paso 

Matrix =  a00 a01 a02
          a10 a11 a12
          a20 a21 a22

when we rotate it by 90 degree
then matrix is
Matrix = a02 a12 a22
         a01 a11 a21
         a00 a10 a20
  
when we rotate it by again 90 
degree then matrix is 
Matrix = a22 a21 a20
         a12 a11 a10
         a02 a01 a00 

De la ilustración anterior , obtenemos que simplemente para rotar la array 180 grados, tendremos que imprimir la array dada de manera inversa.

Javascript

<script>
  
// Javascript program to rotate a
// matrix by 180 degrees
N = 3;
  
// Function to Rotate the
// matrix by 180 degree
function rotateMatrix(mat)
{
      
    // Simply print from last
    // cell to first cell.
    for(var i = N - 1; i >= 0; i--) 
    {
        for(var j = N - 1; j >= 0; j--)
            document.write(mat[i][j] + " ");
  
        document.write("<br>");
    }
}
  
// Driver Code
var mat = [ [ 1, 2, 3 ],
            [ 4, 5, 6 ],
            [ 7, 8, 9 ] ];
  
rotateMatrix(mat);
  
// This code is contributed by kirti
  
</script>

Producción : 

 9 8 7 
 6 5 4 
 3 2 1  

Complejidad temporal: O(N*N) 
Espacio auxiliar: O(1)

Método: 2 (Rotación en el lugar) 
Hay cuatro pasos: 
1- Encuentra la transpuesta de una array. 
2- Columnas inversas de la transpuesta. 
3- Hallar la transpuesta de una array. 
4- Columnas inversas de la transpuesta

Let the given matrix be
1  2  3  4
5  6  7  8
9  10 11 12
13 14 15 16

First we find transpose.
1 5 9 13
2 6 10 14
3 7 11 15
4 8 12 16

Then we reverse elements of every column.
4 8 12 16
3 7 11 15
2 6 10 14
1 5  9 13

then transpose again 
4 3 2 1 
8 7 6 5 
12 11 10 9
16 15 14 13 

Then we reverse elements of every column again
16 15 14 13 
12 11 10 9 
8 7 6 5 
4 3 2 1

Javascript

<script>
// Javascript program for left
// rotation of matrix by 180
  
    let  R = 4, C = 4, t = 0;
      
    // Function to rotate the
    // matrix by 180 degree
    function reverseColumns(arr)
    {
        for (let i = 0; i < C; i++) {
            for (let j = 0, k = C - 1; j < k; j++, k--) {
                t = arr[j][i];
                arr[j][i] = arr[k][i];
                arr[k][i] = t;
            }
        }
    }
      
    // Function for transpose of matrix
    function transpose(arr)
    {
        for (let i = 0; i < R; i++) {
            for (let j = i; j < C; j++) {
                t = arr[i][j];
                arr[i][j] = arr[j][i];
                arr[j][i] = t;
            }
        }
    }
      
    // Function for display the matrix
    function printMatrix(arr)
    {
        for (let i = 0; i < R; i++) {
            for (let j = 0; j < C; j++)
                document.write(arr[i][j] + " ");
            document.write("<br>");
        }
    }
      
    // Function to anticlockwise
    // rotate matrix by 180 degree
    function rotate180(arr)
    {
        transpose(arr);
        reverseColumns(arr);
        transpose(arr);
        reverseColumns(arr);
    }
      
    // Driver Code
    let arr = [ [ 1, 2, 3, 4 ],
        [ 5, 6, 7, 8 ],
        [9, 10, 11, 12 ],
        [13, 14, 15, 16 ] ];
    rotate180(arr);
    printMatrix(arr);
      
    //This code is contributed by avanitrachhadiya2155
      
</script>

Producción : 

 16 15 14 13 
 12 11 10 9 
 8 7 6 5 
 4 3 2 1

Complejidad temporal: O(R*C) 
Espacio auxiliar: O(1)
En el código anterior, la transposición de la array debe encontrarse dos veces y, además, las columnas deben invertirse dos veces. 
Entonces, podemos tener una mejor solución.

Método: 3 (Intercambio de posición)
Aquí, intercambiamos los valores en las posiciones respectivas. 

Javascript

<script>
  
// Reverse Row at specified index in the matrix
// @param data matrix
// @param index row index
function reverseRow(data,index)
{
    let cols = data[index].length;
    for(let i = 0; i < cols / 2; i++) 
    {
        let temp = data[index][i];
        data[index][i] = data[index][cols - i - 1];
        data[index][cols - i - 1] = temp;
    }
}
  
/**
 * Print Matrix data
 * @param data matrix
 */
function printMatrix(data)
{
    for(let i = 0; i < data.length; i++)
    {
        for(let j = 0; j < data[i].length; j++)
        {
            document.write(data[i][j] + " ");
        }
        document.write("<br>");
    }
}
  
/**
 * Rotate Matrix by 180 degrees
 * @param data matrix
 */
function rotateMatrix180(data)
{
    let rows = data.length;
    let cols = data[0].length;
  
    if (rows % 2 != 0) 
    {
          
        // If N is odd reverse the middle 
        // row in the matrix
        reverseRow(data, Math.floor(data.length / 2));
    }
  
    // Swap the value of matrix [i][j] 
    // with [rows - i - 1][cols - j - 1] 
    // for half the rows size.
    for(let i = 0; i <= (rows/2) - 1; i++) 
    {
        for(let j = 0; j < cols; j++) 
        {
            let temp = data[i][j];
            data[i][j] = data[rows - i - 1][cols - j - 1];
            data[rows - i - 1][cols - j - 1] = temp;
        }
    }
}
  
// Driver code
let data = [ [ 1, 2, 3, 4, 5 ],
             [ 6, 7, 8, 9, 10 ],
             [ 11, 12, 13, 14, 15 ],
             [ 16, 17, 18, 19, 20 ],
             [ 21, 22, 23, 24, 25 ] ];
// Rotate Matrix
rotateMatrix180(data);
  
// Print Matrix
printMatrix(data);
  
// This code is contributed by rag2127
     
</script>

Producción : 

25 24 23 22 21 
20 19 18 17 16 
15 14 13 12 11 
10 9 8 7 6 
5 4 3 2 1 

Complejidad temporal : O(R*C) 
Espacio auxiliar : O(1)
 

Consulte el artículo completo sobre Rotar una array 180 grados para obtener más detalles.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *