Open In App
Related Articles

Rotate the matrix right by K times

Improve Article
Improve
Save Article
Save
Like Article
Like

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: 
 


 

Implementation:

C++




// 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 times
void 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 matrix
void 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 code
int 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




// 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 times
void 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 matrix
void 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 code
int 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




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


Python3




# Python program to rotate
# a matrix right by k times
 
# size of matrix
M = 3
N = 3
matrix = [[12, 23, 34],
          [45, 56, 67],
          [78, 89, 91]]
 
# function to rotate
# matrix by k times
def 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 matrix
def 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 code
k = 2
 
# rotate matrix by k
rotateMatrix(k)
 
# display rotated matrix
displayMatrix()
 
# This code is contributed by
# Manish Shaw(manishshaw1)


C#




// C# program to rotate a 
// matrix right by k times
using 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
// PHP program to rotate
// a matrix right by k times
 
// size of matrix
$M = 3;
$N = 3;
 
// function to rotate
// matrix by k times
function 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 matrix
function 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 k
rotateMatrix($matrix, $k);
 
// display rotated matrix
displayMatrix($matrix);
 
// This code is contributed by
// Manish Shaw(manishshaw1)
?>


Javascript




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


Output: 

23 34 12 
56 67 45 
89 91 78

 

Time Complexity: O(n*m)
Auxiliary Space: O(m)


Feeling lost in the world of random DSA topics, wasting time without progress? It's time for a change! Join our DSA course, where we'll guide you on an exciting journey to master DSA efficiently and on schedule.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 geeks!

Last Updated : 03 Aug, 2022
Like Article
Save Article
Similar Reads
Related Tutorials