Rotate the matrix right by K times

14 Jun, 2022
Given a matrix of size N*M, and a number K. We have to rotate the matrix K times to the right side. Examples:  
Input :  N = 3, M = 3, K = 2
         12 23 34
         45 56 67
         78 89 91 

Output : 23 34 12
         56 67 45
         89 91 78 


Input :  N = 2, M = 2, K = 2
         1 2
         3 4
         
Output : 1 2
         3 4
 
A simple yet effective approach is to consider each row of the matrix as an array and perform an array rotation. This can be done by copying the elements from K to end of array to starting of array using temporary array. And then the remaining elements from start to K-1 to end of the array.Lets take an example:  
 
C++
C
Java
Python3
C#
PHP
Javascript
// CPP program to rotate a matrix right by k times#include <iostream> // size of matrix#define M 3#define N 3 using namespace std; // function to rotate matrix by k timesvoid rotateMatrix(int matrix[][M], int k) {  // temporary array of size M  int temp[M];   // within the size of matrix  k = k % M;   for (int i = 0; i < N; i++) {     // copy first M-k elements to temporary array    for (int t = 0; t < M - k; t++)      temp[t] = matrix[i][t];     // copy the elements from k to end to starting    for (int j = M - k; j < M; j++)      matrix[i][j - M + k] = matrix[i][j];     // copy elements from temporary array to end    for (int j = k; j < M; j++)      matrix[i][j] = temp[j - k];  }} // function to display the matrixvoid displayMatrix(int matrix[][M]) {  for (int i = 0; i < N; i++) {    for (int j = 0; j < M; j++)      cout << matrix[i][j] << " ";    cout << endl;  }} // Driver's codeint main() {  int matrix[N][M] = {{12, 23, 34},                     {45, 56, 67},                     {78, 89, 91}};  int k = 2;   // rotate matrix by k  rotateMatrix(matrix, k);   // display rotated matrix  displayMatrix(matrix);   return 0;}
// C program to rotate a matrix right by k times#include <stdio.h> // size of matrix#define M 3#define N 3 // function to rotate matrix by k timesvoid rotateMatrix(int matrix[][M], int k){     // temporary array of size M  int temp[M];   // within the size of matrix  k = k % M;   for (int i = 0; i < N; i++) {     // copy first M-k elements to temporary array    for (int t = 0; t < M - k; t++)      temp[t] = matrix[i][t];     // copy the elements from k to end to starting    for (int j = M - k; j < M; j++)      matrix[i][j - M + k] = matrix[i][j];     // copy elements from temporary array to end    for (int j = k; j < M; j++)      matrix[i][j] = temp[j - k];  }} // function to display the matrixvoid displayMatrix(int matrix[][M]) {  for (int i = 0; i < N; i++) {    for (int j = 0; j < M; j++)      printf("%d ",matrix[i][j]);    printf("\n");  }} // Driver's codeint main() {  int matrix[N][M] = {{12, 23, 34},                     {45, 56, 67},                     {78, 89, 91}};  int k = 2;   // rotate matrix by k  rotateMatrix(matrix, k);   // display rotated matrix  displayMatrix(matrix);   return 0;} // This code is contributed by kothavvsaakash.
// Java program to rotate a matrix// right by k times class GFG{    // size of matrix    static final int M=3;    static final int N=3;         // function to rotate matrix by k times    static void rotateMatrix(int matrix[][], int k)    {        // temporary array of size M        int temp[]=new int[M];                 // within the size of matrix        k = k % M;                 for (int i = 0; i < N; i++)        {                     // copy first M-k elements            // to temporary array            for (int t = 0; t < M - k; t++)            temp[t] = matrix[i][t];                     // copy the elements from k            // to end to starting            for (int j = M - k; j < M; j++)            matrix[i][j - M + k] = matrix[i][j];                     // copy elements from            // temporary array to end            for (int j = k; j < M; j++)            matrix[i][j] = temp[j - k];        }    }         // function to display the matrix    static void displayMatrix(int matrix[][])    {        for (int i = 0; i < N; i++)        {            for (int j = 0; j < M; j++)            System.out.print(matrix[i][j] + " ");            System.out.println();        }    }         // Driver code    public static void main (String[] args)    {        int matrix[][] = {{12, 23, 34},                        {45, 56, 67},                        {78, 89, 91}};    int k = 2;         // rotate matrix by k    rotateMatrix(matrix, k);         // display rotated matrix    displayMatrix(matrix);    }} // This code is contributed by Anant Agarwal.
# Python program to rotate# a matrix right by k times # size of matrixM = 3N = 3matrix = [[12, 23, 34],          [45, 56, 67],          [78, 89, 91]] # function to rotate# matrix by k timesdef rotateMatrix(k) :     global M, N, matrix         # temporary array    # of size M    temp = [0] * M         # within the size    # of matrix    k = k % M         for i in range(0, N) :             # copy first M-k elements        # to temporary array        for t in range(0, M - k) :            temp[t] = matrix[i][t]             # copy the elements from        # k to end to starting        for j in range(M - k, M) :            matrix[i][j - M + k] = matrix[i][j]             # copy elements from        # temporary array to end        for j in range(k, M) :            matrix[i][j] = temp[j - k]     # function to display# the matrixdef displayMatrix() :     global M, N, matrix    for i in range(0, N) :             for j in range(0, M) :            print ("{} " .                   format(matrix[i][j]), end = "")        print () # Driver codek = 2 # rotate matrix by krotateMatrix(k) # display rotated matrixdisplayMatrix() # This code is contributed by# Manish Shaw(manishshaw1)
// C# program to rotate a // matrix right by k timesusing System; class GFG {         // size of matrix    static int M=3;    static int N=3;         // function to rotate matrix by k times    static void rotateMatrix(int [,] matrix,                             int k)    {                 // temporary array of size M        int [] temp=new int[M];                 // within the size of matrix        k = k % M;                 for (int i = 0; i < N; i++)        {                     // copy first M-k elements            // to temporary array            for (int t = 0; t < M - k; t++)            temp[t] = matrix[i, t];                     // copy the elements from k            // to end to starting            for (int j = M - k; j < M; j++)            matrix[i, j - M + k] = matrix[i, j];                     // copy elements from            // temporary array to end            for (int j = k; j < M; j++)            matrix[i, j] = temp[j - k];        }    }         // function to display the matrix    static void displayMatrix(int [,] matrix)    {        for (int i = 0; i < N; i++)        {            for (int j = 0; j < M; j++)            Console.Write(matrix[i, j] + " ");            Console.WriteLine();        }    }         // Driver code    public static void Main ()    {        int [,] matrix = {{12, 23, 34},                          {45, 56, 67},                          {78, 89, 91}};        int k = 2;                 // rotate matrix by k        rotateMatrix(matrix, k);                 // display rotated matrix        displayMatrix(matrix);    }} // This code is contributed by KRV.
<?php// PHP program to rotate// a matrix right by k times // size of matrix$M = 3;$N = 3; // function to rotate// matrix by k timesfunction rotateMatrix(&$matrix, $k){    global $M, $N;         // temporary array    // of size M    $temp = array();         // within the size    // of matrix    $k = $k % $M;         for ($i = 0; $i < $N; $i++)    {             // copy first M-k elements        // to temporary array        for ($t = 0;             $t < $M - $k; $t++)        $temp[$t] = $matrix[$i][$t];             // copy the elements from        // k to end to starting        for ($j = $M - $k;             $j < $M; $j++)        $matrix[$i][$j - $M + $k] =                    $matrix[$i][$j];             // copy elements from        // temporary array to end        for ($j = $k; $j < $M; $j++)        $matrix[$i][$j] = $temp[$j - $k];    }} // function to display// the matrixfunction displayMatrix(&$matrix){    global $M, $N;    for ($i = 0; $i < $N; $i++)    {        for ($j = 0; $j < $M; $j++)        echo ($matrix[$i][$j]." ");        echo ("\n");    }} // Driver code$matrix = array(array(12, 23, 34),                array(45, 56, 67),                array(78, 89, 91));$k = 2; // rotate matrix by krotateMatrix($matrix, $k); // display rotated matrixdisplayMatrix($matrix); // This code is contributed by// Manish Shaw(manishshaw1)?>
<script> // Javascript program to rotate a matrix// right by k times     // size of matrix    var M = 3;     var N = 3;     // function to rotate matrix by k times    function rotateMatrix(matrix , k)    {        // temporary array of size M        var temp = Array(M).fill(0);         // within the size of matrix        k = k % M;         for (i = 0; i < N; i++) {             // copy first M-k elements            // to temporary array            for (t = 0; t < M - k; t++)                temp[t] = matrix[i][t];             // copy the elements from k            // to end to starting            for (j = M - k; j < M; j++)                matrix[i][j - M + k] = matrix[i][j];             // copy elements from            // temporary array to end            for (j = k; j < M; j++)                matrix[i][j] = temp[j - k];        }    }     // function to display the matrix    function displayMatrix(matrix) {        for (i = 0; i < N; i++) {            for (j = 0; j < M; j++)                document.write(matrix[i][j] + " ");            document.write("<br/>");        }    }     // Driver code             var matrix = [        [ 12, 23, 34 ],        [ 45, 56, 67 ],        [ 78, 89, 91 ] ];        var k = 2;         // rotate matrix by k        rotateMatrix(matrix, k);         // display rotated matrix        displayMatrix(matrix); // This code contributed by umadevi9616 </script>
23 34 12 
56 67 45 
89 91 78
 
Time Complexity: O(n*m)Auxiliary Space: O(m)
KRV
manishshaw1
umadevi9616
kothavvsaakash
adi1212
rotation
Matrix
Matrix
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.