Traverse matrix in L shape
Last Updated :
12 Apr, 2023
Given a N * M matrix. The task is to traverse the given matrix in L shape as shown in below image.
Examples:
Input : n = 3, m = 3
a[][] = { { 1, 2, 3 },
{ 4, 5, 6 },
{ 7, 8, 9 } }
Output : 1 4 7 8 9 2 5 6 3
Input : n = 3, m = 4
a[][] = { { 1, 2, 3 },
{ 4, 5, 6 },
{ 7, 8, 9 },
{ 10, 11, 12} }
Output : 1 4 7 10 11 12 2 5 8 9 3 6
Observe there will be m (number of columns) number of L shapes that need to be traverse. So we will traverse each L shape in two parts, first vertical (top to down) and then horizontal (left to right).
To traverse in vertically, observe for each column j, 0 <= j <= m – 1, we need to traverse n – j elements vertically. So for each column j, traverse from a[0][j] to a[n-1-j][j].
Now, to traverse horizontally for each L shape, observe the corresponding row for each column j will be (n-1-j)th row and the first element will be (j+1)th element from the beginning of the row. So, for each L shape or for each column j, to traverse horizontally, traverse from a[n-1-j][j+1] to a[n-1-j][m-1].
Below is the implementation of this approach:
C++
#include <iostream>
using namespace std;
#define MAX 100
void traverseLshape( int a[][MAX], int n, int m)
{
for ( int j = 0; j < m; j++) {
for ( int i = 0; i <= n - j - 1; i++)
cout << a[i][j] << " " ;
for ( int k = j + 1; k < m; k++)
cout << a[n - 1 - j][k] << " " ;
}
}
int main()
{
int n = 4;
int m = 3;
int a[][MAX] = { { 1, 2, 3 },
{ 4, 5, 6 },
{ 7, 8, 9 },
{ 10, 11, 12 } };
traverseLshape(a, n, m);
return 0;
}
|
Java
public class GFG{
static void traverseLshape( int a[][], int n, int m) {
for ( int j = 0 ; j < m; j++) {
for ( int i = 0 ; i <= n - j - 1 ; i++)
System.out.print(a[i][j] + " " );
for ( int k = j + 1 ; k < m; k++)
System.out.print(a[n - 1 - j][k] + " " );
}
}
public static void main(String args[]) {
int n = 4 ;
int m = 3 ;
int a[][] = { { 1 , 2 , 3 },
{ 4 , 5 , 6 },
{ 7 , 8 , 9 },
{ 10 , 11 , 12 } };
traverseLshape(a, n, m);
}
}
|
Python3
def traverseLshape(a, n, m):
for j in range ( 0 , m):
for i in range ( 0 , n - j):
print (a[i][j], end = " " );
for k in range (j + 1 , m):
print (a[n - 1 - j][k], end = " " );
if __name__ = = '__main__' :
n = 4 ;
m = 3 ;
a = [[ 1 , 2 , 3 ],
[ 4 , 5 , 6 ],
[ 7 , 8 , 9 ],
[ 10 , 11 , 12 ]];
traverseLshape(a, n, m);
|
C#
using System;
public class GFG{
static void traverseLshape( int [,] a, int n, int m) {
for ( int j = 0; j < m; j++) {
for ( int i = 0; i <= n - j - 1; i++)
Console.Write(a[i,j] + " " );
for ( int k = j + 1; k < m; k++)
Console.Write(a[n - 1 - j,k] + " " );
}
}
public static void Main() {
int n = 4;
int m = 3;
int [,] a = { { 1, 2, 3 },
{ 4, 5, 6 },
{ 7, 8, 9 },
{ 10, 11, 12 } };
traverseLshape(a, n, m);
}
}
|
Javascript
<script>
var MAX = 100;
function traverseLshape(a, n, m)
{
for ( var j = 0; j < m; j++) {
for ( var i = 0; i <= n - j - 1; i++)
document.write( a[i][j] + " " );
for ( var k = j + 1; k < m; k++)
document.write( a[n - 1 - j][k] + " " );
}
}
var n = 4;
var m = 3;
var a = [ [ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ],
[ 10, 11, 12 ] ];
traverseLshape(a, n, m);
</script>
|
Output
1 4 7 10 11 12 2 5 8 9 3 6
Complexity Analysis:
- Time Complexity: O(n * m)
- Auxiliary Space: O(1)
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...