Rotate a Matrix by 180 degree

01 May, 2021
Given a square matrix, the task is that we turn it by 180 degrees in an anti-clockwise direction without using any extra space. 
Examples : 
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
Method: 1 (Only prints rotated matrix) The solution of this problem is that to rotate a matrix by 180 degrees we can easily follow that step 
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 
From the above illustration, we get that simply to rotate the matrix by 180 degrees then we will have to print the given matrix in a reverse manner.
C++
Java
Python3
C#
PHP
Javascript
// C++ program to rotate a matrix by 180 degrees#include <bits/stdc++.h>#define N 3using namespace std; // Function to Rotate the matrix by 180 degreevoid 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 codeint main(){    int mat[N][N] = {        { 1, 2, 3 },        { 4, 5, 6 },        { 7, 8, 9 }    };     rotateMatrix(mat);    return 0;}
// Java program to rotate a// matrix by 180 degreesimport 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 program to# rotate a matrix by# 180 degreesN = 3; # Function to Rotate# the matrix by 180 degreedef 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 codemat = [[1, 2, 3],       [ 4, 5, 6 ],       [ 7, 8, 9 ]];rotateMatrix(mat); # This code is contributed# by mits
// C# program to rotate a// matrix by 180 degreesusing 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 program to rotate// a matrix by 180 degree$N = 3; // Function to Rotate the// matrix by 180 degreefunction 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?>
<script> // Javascript program to rotate a// matrix by 180 degreesN = 3; // Function to Rotate the// matrix by 180 degreefunction 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 Codevar mat = [ [ 1, 2, 3 ],            [ 4, 5, 6 ],            [ 7, 8, 9 ] ]; rotateMatrix(mat); // This code is contributed by kirti </script>
Output : 
 9 8 7 
 6 5 4 
 3 2 1  
Time complexity: O(N*N) Auxiliary Space: O(1)
Method : 2(In-place rotation) There are four steps : 1- Find transpose of a matrix. 2- Reverse columns of the transpose. 3- Find transpose of a matrix. 4- Reverse columns of the transpose
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++
Java
C#
Python3
PHP
Javascript
// 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 degreevoid 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 matrixvoid 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 matrixvoid 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 degreevoid rotate180(int arr[R][C]){    transpose(arr);    reverseColumns(arr);    transpose(arr);    reverseColumns(arr);} // Driven codeint 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 program for left// rotation of matrix by 180import 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# program for left// rotation of matrix by 180using 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 program for left rotation of matrix by 180  R = 4C = 4  # Function to rotate the matrix by 180 degreedef 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 matrixdef 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 matrixdef 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 degreedef rotate180(arr):    transpose(arr);    reverseColumns(arr);    transpose(arr);    reverseColumns(arr);  # Driven codearr = [ [ 1, 2, 3, 4 ],        [ 5, 6, 7, 8 ],        [9, 10, 11, 12 ],        [13, 14, 15, 16 ] ];rotate180(arr);printMatrix(arr);
<?php// PHP program for left rotation of matrix by 180 $R = 4;$C = 4;  // Function to rotate the matrix by 180 degreefunction 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 matrixfunction 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 matrixfunction 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 degreefunction 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;?>
<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>
Output : 
 16 15 14 13 
 12 11 10 9 
 8 7 6 5 
 4 3 2 1
Time complexity : O(R*C) Auxiliary Space : O(1)In the code above, the transpose of the matrix has to be found twice, and also, columns have to be reversed twice. So, we can have a better solution.
Method : 3 (Position swapping)Here, we swap the values in the respective positions. 
C++
Java
Python3
C#
Javascript
#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
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);    }}
# Reverse Row at specified index in the matrixdef 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 datadef 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 degreesdef 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 Codedata = [ [ 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 Matrixdata = rotateMatrix(data) # Print MatrixprintMatrix(data) # This code is contributed by rohitsingh07052
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
<script> // Reverse Row at specified index in the matrix// @param data matrix// @param index row indexfunction 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 codelet 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 MatrixrotateMatrix180(data); // Print MatrixprintMatrix(data); // This code is contributed by rag2127    </script>
Output : 
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 
Time complexity : O(R*C) Auxiliary Space : O(1) 
ukasp
jit_t
Mithun Kumar
rajatssb
Knv Srinivas
rohitsingh07052
subhammahato348
divyeshrabadiya07
Kirti_Mangal
avanitrachhadiya2155
rag2127
Nvidia
rotation
Mathematical
Matrix
Nvidia
Mathematical
Matrix
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Program for Fibonacci numbers
Set in C++ Standard Template Library (STL)
Write a program to print all permutations of a given string
C++ Data Types
Merge two sorted arrays
Matrix Chain Multiplication | DP-8
Program to find largest element in an array
Rat in a Maze | Backtracking-2
Sudoku | Backtracking-7
The Celebrity Problem