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