Python3 Program for Rotate matrix by 45 degrees
Given a matrix mat[][] of size N*N, the task is to rotate the matrix by 45 degrees and print the matrix.
Examples:
Input: N = 6,
mat[][] = {{3, 4, 5, 1, 5, 9, 5},
{6, 9, 8, 7, 2, 5, 2},
{1, 5, 9, 7, 5, 3, 2},
{4, 7, 8, 9, 3, 5, 2},
{4, 5, 2, 9, 5, 6, 2},
{4, 5, 7, 2, 9, 8, 3}}
Output:
3
6 4
1 9 5
4 5 8 1
4 7 9 7 5
4 5 8 7 2 9
5 2 9 5 5
7 9 3 3
2 5 5
9 6
8Input: N = 4,
mat[][] = {{2, 5, 7, 2},
{9, 1, 4, 3},
{5, 8, 2, 3},
{6, 4, 6, 3}}Output:
2
9 5
5 1 7
6 8 4 2
4 2 3
6 3
3
Approach: Follow the steps given below in order to solve the problem:
- Store the diagonal elements in a list using a counter variable.
- Print the number of spaces required to make the output look like the desired pattern.
- Print the list elements after reversing the list.
- Traverse through only diagonal elements to optimize the time taken by the operation.
Below is the implementation of the above approach:
Python3
# Python3 program for the above approach # Function to rotate matrix by 45 degree def matrix(n, m, li): # Counter Variable ctr = 0 while (ctr < 2 * n - 1 ): print ( " " * abs (n - ctr - 1 ), end = "") lst = [] # Iterate [0, m] for i in range (m): # Iterate [0, n] for j in range (n): # Diagonal Elements # Condition if i + j = = ctr: # Appending the # Diagonal Elements lst.append(li[i][j]) # Printing reversed Diagonal # Elements lst.reverse() print ( * lst) ctr + = 1 # Driver Code # Dimensions of Matrix n = 8 m = n # Given matrix li = [[ 4 , 5 , 6 , 9 , 8 , 7 , 1 , 4 ], [ 1 , 5 , 9 , 7 , 5 , 3 , 1 , 6 ], [ 7 , 5 , 3 , 1 , 5 , 9 , 8 , 0 ], [ 6 , 5 , 4 , 7 , 8 , 9 , 3 , 7 ], [ 3 , 5 , 6 , 4 , 8 , 9 , 2 , 1 ], [ 3 , 1 , 6 , 4 , 7 , 9 , 5 , 0 ], [ 8 , 0 , 7 , 2 , 3 , 1 , 0 , 8 ], [ 7 , 5 , 3 , 1 , 5 , 9 , 8 , 5 ]] # Function Call matrix(n, m, li) |
4 1 5 7 5 6 6 5 9 9 3 5 3 7 8 3 5 4 1 5 7 8 1 6 7 5 3 1 7 0 6 4 8 9 1 4 5 7 4 8 9 8 6 3 2 7 9 3 0 1 3 9 2 7 5 1 5 1 9 0 0 8 8 5
Time Complexity: O(N2)
Auxiliary Space: O(N) since using list for auxiliary space
Please refer complete article on Rotate matrix by 45 degrees for more details!
Please Login to comment...