Check if row-major order path of Matrix is palindrome or not
Given a matrix mat[][], the task is to check if the row-major order path of the matrix is a palindrome or not.
Examples:
Input: mat[][] = {{1, 2, 3}, {4, 5, 4}, {3, 2, 1}}
Output: YES
Explanation:
Row-major order traversal of matrix is –
1 => 2 => 3 => 4 => 5 => 4 => 3 => 2 => 1
Reverse row-major order traversal of matrix is –
1 => 2 => 3 => 4 => 5 => 4 => 3 => 2 => 1
Since, the reverse and forward traversal of matrix is same.
Therefore, it is a palindrome.
Input: mat[][] = {{1, 2}, {2, 3}}
Output: NO
Approach: The idea is to traverse the half matrix and check its opposite half elements are the same or not at the same time. That is for the index of i and j, check that and . If for any index there is a mismatch, print NO.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
bool isPal( int a[3][3], int n, int m)
{
for ( int i = 0; i < n / 2; i++) {
for ( int j = 0; j < m - 1; j++) {
if (a[i][j] != a[n - 1 - i][m - 1 - j])
return false ;
}
}
return true ;
}
int main()
{
int n = 3, m = 3;
int a[3][3] = { { 1, 2, 3 },
{ 4, 5, 4 },
{ 3, 2, 1 } };
if (isPal(a, n, m)) {
cout << "YES" << endl;
}
else {
cout << "NO" << endl;
}
}
|
Java
import java.util.*;
class GFG{
static boolean isPal( int a[][], int n, int m)
{
for ( int i = 0 ; i < n / 2 ; i++)
{
for ( int j = 0 ; j < m - 1 ; j++)
{
if (a[i][j] != a[n - 1 - i][m - 1 - j])
return false ;
}
}
return true ;
}
public static void main(String[] args)
{
int n = 3 , m = 3 ;
int a[][] = { { 1 , 2 , 3 },
{ 4 , 5 , 4 },
{ 3 , 2 , 1 } };
if (isPal(a, n, m))
{
System.out.print( "YES" + "\n" );
}
else
{
System.out.print( "NO" + "\n" );
}
}
}
|
Python3
def isPal(a, n, m):
for i in range ( 0 , n / / 2 ):
for j in range ( 0 , m - 1 ):
if (a[i][j] ! = a[n - 1 - i][m - 1 - j]):
return False ;
return True ;
if __name__ = = '__main__' :
n = 3 ;
m = 3 ;
a = [[ 1 , 2 , 3 ], [ 4 , 5 , 4 ], [ 3 , 2 , 1 ]];
if (isPal(a, n, m)):
print ( "YES" );
else :
print ( "NO" );
|
C#
using System;
class GFG{
static bool isPal( int [,]a, int n, int m)
{
for ( int i = 0; i < n / 2; i++)
{
for ( int j = 0; j < m - 1; j++)
{
if (a[i, j] != a[n - 1 - i,
m - 1 - j])
return false ;
}
}
return true ;
}
public static void Main(String[] args)
{
int n = 3, m = 3;
int [,]a = { { 1, 2, 3 },
{ 4, 5, 4 },
{ 3, 2, 1 } };
if (isPal(a, n, m))
{
Console.Write( "YES" + "\n" );
}
else
{
Console.Write( "NO" + "\n" );
}
}
}
|
Javascript
<script>
function isPal(a, n, m)
{
for (let i = 0; i < n / 2; i++)
{
for (let j = 0; j < m - 1; j++)
{
if (a[i][j] != a[n - 1 - i][m - 1 - j])
return false ;
}
}
return true ;
}
let n = 3, m = 3;
let a = [ [ 1, 2, 3 ],
[ 4, 5, 4 ],
[ 3, 2, 1 ] ];
if (isPal(a, n, m))
{
document.write( "YES" + "\n" );
}
else
{
document.write( "NO" + "\n" );
}
</script>
|
Time complexity: O(n*m) where n and m are no of rows and columns of a given input matrix
Auxiliary Space: O(n*m)
Last Updated :
02 Nov, 2023
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...