Related Articles

# Rotate a matrix clockwise by 90 degree without using any extra space | Set 3

• Difficulty Level : Medium
• Last Updated : 09 Jul, 2021

Given a rectangular matrix mat[][] with N rows and M columns, the task is to rotate the matrix by 90 degrees in a clockwise direction without using extra space.

Examples:

Input: mat[][] = {{1, 2, 3},  {4, 5, 6},   {7, 8, 9},  {10, 11, 12}}
Output: 10 7 4 1
11 8 5 2
12 9 6 3

Input: mat[][] = {{1, 2, 3, 4, 5, 6}, {7, 8, 9, 10, 11, 12}}
Output: 7 1
8 2
9 3
10 4
11 5
12 6

Note: The approach to rotate square matrix is already discussed as follows:

Approach: The main idea is to perform an in-place rotation.

Follow the below steps to solve the given problem:

1. Swap all the elements of the sub-matrix min(N, M) * min(N, M), along the main diagonal i.e from the upper top corner to the bottom right corner.
2. If N is greater than M,
• Push all the unswapped elements of each column i where (min(N, M) ≤ i) to the ith row.
• Otherwise, push all the unswapped elements of each row i where (min(N, M) ≤ i) to the ith column.
3. Reverse each row of the matrix
4. Print the updated matrix of dimension M × N.

Procedure:

Let the given matrix be :
1 2 3
4 5 6
7 8 9
10 11 12
13 14 15
Swap all the elements of the sub-matrix min(N, M) * min(N, M) i.e 3 * 3 for this example
1 4 7
2 5 8
3 6 9
10 11 12
13 14 15

Since N > M, push all the unswapped elements of each column i (min(N, M) ≤ i) to the ith row
1 4 7 10 13
2 5 8 11 14
3 6 9 12 15

Reverse each column to get the final rotated matrix as:
13 10 7 4 1
14 11 8 5 2
15 12 9 6 3

Below is the implementation of the above approach:

## C++

 `// C++ program for``// the above approach``#include ``using` `namespace` `std;`` ` `// Function to print the matrix mat``// with N rows and M columns``void` `print(vector > mat,``           ``int` `N, ``int` `M)``{``    ``for` `(``int` `i = 0; i < N; i++) {``        ``for` `(``int` `j = 0; j < M; j++) {``            ``cout << mat[i][j] << ``" "``;``        ``}`` ` `        ``cout << ``"\n"``;``    ``}``}`` ` `// Function to rotate the matrix``// by 90 degree clockwise``void` `rotate(vector > mat)``{``    ``// Number of rows``    ``int` `N = mat.size();`` ` `    ``// Number of columns``    ``int` `M = mat.size();`` ` `    ``// Swap all the elements along main diagonal``    ``// in the submatrix min(N, M) * min(N, M)``    ``for` `(``int` `i = 0; i < min(N, M); i++) {``        ``for` `(``int` `j = i; j < min(N, M); j++) {`` ` `            ``// Swap mat[i][j] and mat[j][i]``            ``swap(mat[i][j], mat[j][i]);``        ``}``    ``}`` ` `    ``// If N is greater than M``    ``if` `(N > M) {`` ` `        ``// Push all the unswapped elements``        ``// of ith column to ith row``        ``for` `(``int` `i = 0; i < M; i++) {``            ``for` `(``int` `j = min(N, M); j < N; j++) {``                ``mat[i].push_back(mat[j][i]);``            ``}``        ``}``    ``}``    ``else` `{``        ``// Resize mat to have M rows``        ``mat.resize(M, {});`` ` `        ``// Push all the unswapped elements``        ``// of ith column to ith row``        ``for` `(``int` `i = min(N, M); i < M; i++) {``            ``for` `(``int` `j = 0; j < N; j++) {``                ``mat[i].push_back(mat[j][i]);``            ``}``        ``}``    ``}`` ` `    ``// Reverse each row of the matrix``    ``for` `(``int` `i = 0; i < M; i++) {``        ``reverse(mat[i].begin(), mat[i].end());``    ``}`` ` `    ``// Print the final matrix``    ``print(mat, M, N);``}`` ` `// Driver Code``int` `main()``{``    ``// Input``    ``vector > mat = { { 1, 2, 3 },``                                 ``{ 4, 5, 6 },``                                 ``{ 7, 8, 9 },``                                 ``{ 10, 11, 12 } };`` ` `    ``// Function Call``    ``rotate(mat);`` ` `    ``return` `0;``}`
Output
```10 7 4 1
11 8 5 2
12 9 6 3 ```

Time Complexity: O(N * M)
Auxiliary Space: O(1)

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.

My Personal Notes arrow_drop_up