Rotate the matrix right by K times
Last Updated :
03 Aug, 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:
Implementation:
C++
#include <iostream>
#define M 3
#define N 3
using namespace std;
void rotateMatrix( int matrix[][M], int k) {
int temp[M];
k = k % M;
for ( int i = 0; i < N; i++) {
for ( int t = 0; t < M - k; t++)
temp[t] = matrix[i][t];
for ( int j = M - k; j < M; j++)
matrix[i][j - M + k] = matrix[i][j];
for ( int j = k; j < M; j++)
matrix[i][j] = temp[j - k];
}
}
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;
}
}
int main() {
int matrix[N][M] = {{12, 23, 34},
{45, 56, 67},
{78, 89, 91}};
int k = 2;
rotateMatrix(matrix, k);
displayMatrix(matrix);
return 0;
}
|
C
#include <stdio.h>
#define M 3
#define N 3
void rotateMatrix( int matrix[][M], int k)
{
int temp[M];
k = k % M;
for ( int i = 0; i < N; i++) {
for ( int t = 0; t < M - k; t++)
temp[t] = matrix[i][t];
for ( int j = M - k; j < M; j++)
matrix[i][j - M + k] = matrix[i][j];
for ( int j = k; j < M; j++)
matrix[i][j] = temp[j - k];
}
}
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" );
}
}
int main() {
int matrix[N][M] = {{12, 23, 34},
{45, 56, 67},
{78, 89, 91}};
int k = 2;
rotateMatrix(matrix, k);
displayMatrix(matrix);
return 0;
}
|
Java
class GFG
{
static final int M= 3 ;
static final int N= 3 ;
static void rotateMatrix( int matrix[][], int k)
{
int temp[]= new int [M];
k = k % M;
for ( int i = 0 ; i < N; i++)
{
for ( int t = 0 ; t < M - k; t++)
temp[t] = matrix[i][t];
for ( int j = M - k; j < M; j++)
matrix[i][j - M + k] = matrix[i][j];
for ( int j = k; j < M; j++)
matrix[i][j] = temp[j - k];
}
}
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();
}
}
public static void main (String[] args)
{
int matrix[][] = {{ 12 , 23 , 34 },
{ 45 , 56 , 67 },
{ 78 , 89 , 91 }};
int k = 2 ;
rotateMatrix(matrix, k);
displayMatrix(matrix);
}
}
|
Python3
M = 3
N = 3
matrix = [[ 12 , 23 , 34 ],
[ 45 , 56 , 67 ],
[ 78 , 89 , 91 ]]
def rotateMatrix(k) :
global M, N, matrix
temp = [ 0 ] * M
k = k % M
for i in range ( 0 , N) :
for t in range ( 0 , M - k) :
temp[t] = matrix[i][t]
for j in range (M - k, M) :
matrix[i][j - M + k] = matrix[i][j]
for j in range (k, M) :
matrix[i][j] = temp[j - k]
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 ()
k = 2
rotateMatrix(k)
displayMatrix()
|
C#
using System;
class GFG {
static int M=3;
static int N=3;
static void rotateMatrix( int [,] matrix,
int k)
{
int [] temp= new int [M];
k = k % M;
for ( int i = 0; i < N; i++)
{
for ( int t = 0; t < M - k; t++)
temp[t] = matrix[i, t];
for ( int j = M - k; j < M; j++)
matrix[i, j - M + k] = matrix[i, j];
for ( int j = k; j < M; j++)
matrix[i, j] = temp[j - k];
}
}
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();
}
}
public static void Main ()
{
int [,] matrix = {{12, 23, 34},
{45, 56, 67},
{78, 89, 91}};
int k = 2;
rotateMatrix(matrix, k);
displayMatrix(matrix);
}
}
|
PHP
<?php
$M = 3;
$N = 3;
function rotateMatrix(& $matrix , $k )
{
global $M , $N ;
$temp = array ();
$k = $k % $M ;
for ( $i = 0; $i < $N ; $i ++)
{
for ( $t = 0;
$t < $M - $k ; $t ++)
$temp [ $t ] = $matrix [ $i ][ $t ];
for ( $j = $M - $k ;
$j < $M ; $j ++)
$matrix [ $i ][ $j - $M + $k ] =
$matrix [ $i ][ $j ];
for ( $j = $k ; $j < $M ; $j ++)
$matrix [ $i ][ $j ] = $temp [ $j - $k ];
}
}
function displayMatrix(& $matrix )
{
global $M , $N ;
for ( $i = 0; $i < $N ; $i ++)
{
for ( $j = 0; $j < $M ; $j ++)
echo ( $matrix [ $i ][ $j ]. " " );
echo ( "\n" );
}
}
$matrix = array ( array (12, 23, 34),
array (45, 56, 67),
array (78, 89, 91));
$k = 2;
rotateMatrix( $matrix , $k );
displayMatrix( $matrix );
?>
|
Javascript
<script>
var M = 3;
var N = 3;
function rotateMatrix(matrix , k)
{
var temp = Array(M).fill(0);
k = k % M;
for (i = 0; i < N; i++) {
for (t = 0; t < M - k; t++)
temp[t] = matrix[i][t];
for (j = M - k; j < M; j++)
matrix[i][j - M + k] = matrix[i][j];
for (j = k; j < M; j++)
matrix[i][j] = temp[j - k];
}
}
function displayMatrix(matrix) {
for (i = 0; i < N; i++) {
for (j = 0; j < M; j++)
document.write(matrix[i][j] + " " );
document.write( "<br/>" );
}
}
var matrix = [
[ 12, 23, 34 ],
[ 45, 56, 67 ],
[ 78, 89, 91 ] ];
var k = 2;
rotateMatrix(matrix, k);
displayMatrix(matrix);
</script>
|
Output:
23 34 12
56 67 45
89 91 78
Time Complexity: O(n*m)
Auxiliary Space: O(m)
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...