Rotate Each Row of Matrix K Times (original) (raw)

Last Updated : 3 Oct, 2024

Given a matrix of size N*M, and a number K. We need to clockwise (or right) rotate each row of matrix K times.

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

Try It Yourselfredirect icon

C++ `

// CPP program to rotate a matrix right by k times #include

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

JavaScript

PHP

M,M, M,N; // temporary array // of size M $temp = array(); // within the size // of matrix k=k = k=k % $M; for ($i = 0; i<i < i<N; $i++) { // copy first M-k elements // to temporary array for ($t = 0; t<t < t<M - k;k; k;t++) temp[temp[temp[t] = matrix[matrix[matrix[i][$t]; // copy the elements from // k to end to starting for ($j = M−M - Mk; j<j < j<M; $j++) matrix[matrix[matrix[i][$j - M+M + M+k] = matrix[matrix[matrix[i][$j]; // copy elements from // temporary array to end for ($j = k;k; k;j < M;M; M;j++) matrix[matrix[matrix[i][$j] = temp[temp[temp[j - $k]; } } // function to display // the matrix function displayMatrix(&$matrix) { global M,M, M,N; for ($i = 0; i<i < i<N; $i++) { for ($j = 0; j<j < 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) ?>

`

Output

23 34 12 56 67 45 89 91 78

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