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.
C++
// C++ program to rotate a matrix by 180 degrees #include <bits/stdc++.h> #define N 3 using namespace std; // Function to Rotate the matrix by 180 degree void rotateMatrix(int mat[][N]) { // Simply print from last cell to first cell. for (int i = N - 1; i >= 0; i--) { for (int j = N - 1; j >= 0; j--) printf("%d ", mat[i][j]); printf("\n"); } } // Driven code int main() { int mat[N][N] = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } }; rotateMatrix(mat); return 0; }
Java
// Java program to rotate a // matrix by 180 degrees import java.util.*; class GFG { static int N = 3; // Function to Rotate the // matrix by 180 degree static void rotateMatrix(int mat[][]) { // Simply print from last // cell to first cell. for (int i = N - 1; i >= 0; i--) { for (int j = N - 1; j >= 0; j--) System.out.print(mat[i][j] + " "); System.out.println(); } } // Driver Code public static void main(String[] args) { int[][] mat = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } }; rotateMatrix(mat); } } // This code is contributed by ChitraNayal
Python3
# Python3 program to # rotate a matrix by # 180 degrees N = 3; # Function to Rotate # the matrix by 180 degree def rotateMatrix(mat): # Simply print from # last cell to first cell. i = N - 1; while(i >= 0): j = N - 1; while(j >= 0): print(mat[i][j], end = " "); j = j - 1; print(); i = i - 1; # Driven code mat = [[1, 2, 3], [ 4, 5, 6 ], [ 7, 8, 9 ]]; rotateMatrix(mat); # This code is contributed # by mits
C#
// C# program to rotate a // matrix by 180 degrees using System; class GFG { static int N = 3; // Function to Rotate the // matrix by 180 degree static void rotateMatrix(int[, ] mat) { // Simply print from last // cell to first cell. for (int i = N - 1; i >= 0; i--) { for (int j = N - 1; j >= 0; j--) Console.Write(mat[i, j] + " "); Console.WriteLine(); } } // Driver Code static public void Main() { int[, ] mat = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } }; rotateMatrix(mat); } } // This code is contributed by aj_36
PHP
<?php // PHP program to rotate // a matrix by 180 degree $N = 3; // Function to Rotate the // matrix by 180 degree function rotateMatrix($mat) { global $N; // Simply print from // last cell to first cell. for ($i = $N - 1; $i >= 0; $i--) { for ($j = $N - 1; $j >= 0; $j--) echo $mat[$i][$j], " "; echo "\n"; } } // Driver Code $mat = array(array(1, 2, 3), array(4, 5, 6), array(7, 8, 9)); rotateMatrix($mat); // This code is contributed by ajit ?>
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 transposición 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
C++
// C++ program for left rotation of matrix by 180 #include <bits/stdc++.h> using namespace std; #define R 4 #define C 4 // Function to rotate the matrix by 180 degree void reverseColumns(int arr[R][C]) { for (int i = 0; i < C; i++) for (int j = 0, k = C - 1; j < k; j++, k--) swap(arr[j][i], arr[k][i]); } // Function for transpose of matrix void transpose(int arr[R][C]) { for (int i = 0; i < R; i++) for (int j = i; j < C; j++) swap(arr[i][j], arr[j][i]); } // Function for display the matrix void printMatrix(int arr[R][C]) { for (int i = 0; i < R; i++) { for (int j = 0; j < C; j++) cout << arr[i][j] << " "; cout << '\n'; } } // Function to anticlockwise rotate matrix // by 180 degree void rotate180(int arr[R][C]) { transpose(arr); reverseColumns(arr); transpose(arr); reverseColumns(arr); } // Driven code int main() { int arr[R][C] = { { 1, 2, 3, 4 }, { 5, 6, 7, 8 }, { 9, 10, 11, 12 }, { 13, 14, 15, 16 } }; rotate180(arr); printMatrix(arr); return 0; }
Java
// Java program for left // rotation of matrix by 180 import java.util.*; class GFG { static int R = 4, C = 4, t = 0; // Function to rotate the // matrix by 180 degree static void reverseColumns(int arr[][]) { for (int i = 0; i < C; i++) { for (int 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 static void transpose(int arr[][]) { for (int i = 0; i < R; i++) { for (int j = i; j < C; j++) { t = arr[i][j]; arr[i][j] = arr[j][i]; arr[j][i] = t; } } } // Function for display the matrix static void printMatrix(int arr[][]) { for (int i = 0; i < R; i++) { for (int j = 0; j < C; j++) System.out.print(arr[i][j] + " "); System.out.println(); } } // Function to anticlockwise // rotate matrix by 180 degree static void rotate180(int arr[][]) { transpose(arr); reverseColumns(arr); transpose(arr); reverseColumns(arr); } // Driver Code public static void main(String[] args) { int[][] 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 ChitraNayal
C#
// C# program for left // rotation of matrix by 180 using System; class GFG { static int R = 4, C = 4, t = 0; // Function to rotate the // matrix by 180 degree static void reverseColumns(int[, ] arr) { for (int i = 0; i < C; i++) { for (int 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 static void transpose(int[, ] arr) { for (int i = 0; i < R; i++) { for (int j = i; j < C; j++) { t = arr[i, j]; arr[i, j] = arr[j, i]; arr[j, i] = t; } } } // Function for display the matrix static void printMatrix(int[, ] arr) { for (int i = 0; i < R; i++) { for (int j = 0; j < C; j++) Console.Write(arr[i, j] + " "); Console.WriteLine(); } } // Function to anticlockwise // rotate matrix by 180 degree static void rotate180(int[, ] arr) { transpose(arr); reverseColumns(arr); transpose(arr); reverseColumns(arr); } // Driver Code static public void Main() { int[, ] 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 ajit
Python3
# Python3 program for left rotation of matrix by 180 R = 4 C = 4 # Function to rotate the matrix by 180 degree def reverseColumns(arr): for i in range(C): j = 0 k = C-1 while j < k: t = arr[j][i] arr[j][i] = arr[k][i] arr[k][i] = t j += 1 k -= 1 # Function for transpose of matrix def transpose(arr): for i in range(R): for j in range(i, C): t = arr[i][j] arr[i][j] = arr[j][i] arr[j][i] = t # Function for display the matrix def printMatrix(arr): for i in range(R): for j in range(C): print(arr[i][j], end = " "); print(); # Function to anticlockwise rotate matrix # by 180 degree def rotate180(arr): transpose(arr); reverseColumns(arr); transpose(arr); reverseColumns(arr); # Driven code arr = [ [ 1, 2, 3, 4 ], [ 5, 6, 7, 8 ], [9, 10, 11, 12 ], [13, 14, 15, 16 ] ]; rotate180(arr); printMatrix(arr);
PHP
<?php // PHP program for left rotation of matrix by 180 $R = 4; $C = 4; // Function to rotate the matrix by 180 degree function reverseColumns(&$arr) { global $C; for ($i = 0; $i < $C; $i++) { for ($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) { global $R, $C; for ($i = 0; $i < $R; $i++) { for ($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) { global $R, $C; for ($i = 0; $i < $R; $i++) { for ($j = 0; $j < $C; $j++) { echo $arr[$i][$j]." "; } echo "\n"; } } // Function to anticlockwise rotate matrix // by 180 degree function rotate180(&$arr) { transpose($arr); reverseColumns($arr); transpose($arr); reverseColumns($arr); } // Driven code $arr = array( array( 1, 2, 3, 4 ), array( 5, 6, 7, 8 ), array( 9, 10, 11, 12 ), array( 13, 14, 15, 16 ) ); rotate180($arr); printMatrix($arr); return 0; ?>
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.
C++
#include <bits/stdc++.h> using namespace std; /** * Reverse Row at specified index in the matrix * @param data matrix * @param index row index */ void reverseRow(vector<vector<int>>& data, int index) { int cols = data[index].size(); for(int i = 0; i < cols / 2; i++) { int temp = data[index][i]; data[index][i] = data[index][cols - i - 1]; data[index][cols - i - 1] = temp; } } /** * Print Matrix data * @param data matrix */ void printMatrix(vector<vector<int>>& data) { for(int i = 0; i < data.size(); i++) { for(int j = 0; j < data[i].size(); j++) { cout << data[i][j] << " "; } cout << endl; } } /** * Rotate Matrix by 180 degrees * @param data matrix */ void rotateMatrix180(vector<vector<int>>& data) { int rows = data.size(); int cols = data[0].size(); if (rows % 2 != 0) { // If N is odd reverse the middle // row in the matrix reverseRow(data, data.size() / 2); } // Swap the value of matrix [i][j] with // [rows - i - 1][cols - j - 1] for half // the rows size. for(int i = 0; i <= (rows/2) - 1; i++) { for(int j = 0; j < cols; j++) { int temp = data[i][j]; data[i][j] = data[rows - i - 1][cols - j - 1]; data[rows - i - 1][cols - j - 1] = temp; } } } // Driver code int main() { vector<vector<int>> 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); return 0; } // This code is contributed by divyeshrabadiya07
Java
public class GFG { /** * Reverse Row at specified index in the matrix * @param data matrix * @param index row index */ private static void reverseRow(int[][] data, int index) { int cols = data[index].length; for (int i = 0; i < cols / 2; i++) { int temp = data[index][i]; data[index][i] = data[index][cols - i - 1]; data[index][cols - i - 1] = temp; } } /** * Print Matrix data * @param data matrix */ private static void printMatrix(int[][] data) { for (int i = 0; i < data.length; i++) { for (int j = 0; j < data[i].length; j++) { System.out.print(data[i][j] + " "); } System.out.println(""); } } /** * Rotate Matrix by 180 degrees * @param data matrix */ private static void rotateMatrix180(int[][] data) { int rows = data.length; int cols = data[0].length; if (rows % 2 != 0) { //If N is odd reverse the middle row in the matrix reverseRow(data, data.length / 2); } //Swap the value of matrix [i][j] with [rows - i - 1][cols - j - 1] for half the rows size. for (int i = 0; i <= (rows/2) - 1; i++) { for (int j = 0; j < cols; j++) { int temp = data[i][j]; data[i][j] = data[rows - i - 1][cols - j - 1]; data[rows - i - 1][cols - j - 1] = temp; } } } public static void main(String[] args) { int[][] 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); } }
Python3
# Reverse Row at specified index in the matrix def reverseRow(data, index): cols = len(data[index]) for i in range(cols // 2): temp = data[index][i] data[index][i] = data[index][cols - i - 1] data[index][cols - i - 1] = temp return data # Print Matrix data def printMatrix(data): for i in range(len(data)): for j in range(len(data[0])): print(data[i][j], end = ' ') print() # Rotate Matrix by 180 degrees def rotateMatrix(data): rows = len(data) cols = len(data[0]) if (rows % 2): # If N is odd reverse the middle # row in the matrix data = reverseRow(data, len(data) // 2) # Swap the value of matrix [i][j] with # [rows - i - 1][cols - j - 1] for half # the rows size. for i in range(rows // 2): for j in range(cols): temp = data[i][j] data[i][j] = data[rows - i - 1][cols - j - 1] data[rows - i - 1][cols - j - 1] = temp return data # Driver Code 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 data = rotateMatrix(data) # Print Matrix printMatrix(data) # This code is contributed by rohitsingh07052
C#
using System; class GFG { /** * Reverse Row at specified index in the matrix * @param data matrix * @param index row index */ private static void reverseRow(int[, ] data, int index) { int cols = data.GetLength(1); for (int i = 0; i < cols / 2; i++) { int temp = data[index, i]; data[index, i] = data[index, cols - i - 1]; data[index, cols - i - 1] = temp; } } /** * Print Matrix data * @param data matrix */ private static void printMatrix(int[, ] data) { for (int i = 0; i < data.GetLength(0); i++) { for (int j = 0; j < data.GetLength(1); j++) { Console.Write(data[i, j] + " "); } Console.WriteLine(); } } /** * Rotate Matrix by 180 degrees * @param data matrix */ private static void rotateMatrix180(int[, ] data) { int rows = data.GetLength(0); int cols = data.GetLength(1); if (rows % 2 != 0) { // If N is odd reverse the middle row in the // matrix reverseRow(data, data.GetLength(0) / 2); } // Swap the value of matrix [i][j] with [rows - i - // 1][cols - j - 1] for half the rows size. for (int i = 0; i <= (rows / 2) - 1; i++) { for (int j = 0; j < cols; j++) { int temp = data[i, j]; data[i, j] = data[rows - i - 1, cols - j - 1]; data[rows - i - 1, cols - j - 1] = temp; } } } // Driver code public static void Main() { int[, ] 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 subhammahato348
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)
Publicación traducida automáticamente
Artículo escrito por SHARIQ_JMI y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA