Open In App

Javascript Program for Rotate a Matrix by 180 degree

Last Updated : 12 Sep, 2024
Comments
Improve
Suggest changes
Like Article
Like
Report

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.

Example:

JavaScript
// 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 (let i = N - 1; i >= 0; i--) {
        let output = '';
        for (let j = N - 1; j >= 0; j--)
            output += mat[i][j] + " ";
        console.log(output);
    }
}

// Driver Code
let mat = [[1, 2, 3],
[4, 5, 6],
[7, 8, 9]];

rotateMatrix(mat);
// This code is contributed by kirti

Output
9 8 7 
6 5 4 
3 2 1 

Complexity Analysis:

  • 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
JavaScript
// 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++) {
        let output = '';
        for (let j = 0; j < C; j++)
            output += arr[i][j] + " "
        console.log(output);
    }
}

// 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

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

Complexity Analysis:

  • 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. 

JavaScript
// 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++) {
        let output = '';
        for (let j = 0; j < data[i].length; j++) {
            output += data[i][j] + " "
        }
        console.log(output);
    }
}

/**
 * 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

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 

Complexity Analysis:

  • Time complexity : O(R*C) 
  • Auxiliary Space : O(1) 

Please refer complete article on Rotate a Matrix by 180 degree for more details!


Next Article

Similar Reads