The challenge
You are given an n x n 2D matrix representing an image.
Rotate the image by 90 degrees (clockwise).
Note:
You have to rotate the image in-place, which means you have to modify the input 2D matrix directly. DO NOT allocate another 2D matrix and do the rotation.
Example 1:
Given input matrix = [ [1,2,3], [4,5,6], [7,8,9] ], rotate the input matrix in-place such that it becomes: [ [7,4,1], [8,5,2], [9,6,3] ]
Example 2:
Given input matrix = [ [ 5, 1, 9,11], [ 2, 4, 8,10], [13, 3, 6, 7], [15,14,12,16] ], rotate the input matrix in-place such that it becomes: [ [15,13, 2, 5], [14, 3, 4, 1], [12, 6, 8, 9], [16, 7,10,11] ]
The first solution
With this solution, we loop through each column and row and swap the elements, then finally we loop through each row one last time and reverse them.
def rotate(self, matrix: List[List[int]]) -> None:
# Transpose the matrix
for i in range(len(matrix)):
for j in range(i, len(matrix)):
matrix[i][j], matrix[j][i] = matrix[j][i], matrix[i][j]
# Reverse each row
for i in range(len(matrix)):
matrix[i].reverse()
An alternative solution
With this solution, we start by reversing the list and then loop through each column and row. Within this second loop, we swap the elements.
def rotate(self, matrix: List[List[int]]) -> None:
n = len(matrix)
matrix.reverse()
for x in range(n):
for y in range(n-1, x-1, -1):
matrix[x][y], matrix[y][x] = matrix[y][x], matrix[x][y]