## 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:**

Giveninput matrix= [ [1,2,3], [4,5,6], [7,8,9] ], rotate the input matrixin-placesuch that it becomes: [ [7,4,1], [8,5,2], [9,6,3] ]

**Example 2:**

Giveninput matrix= [ [ 5, 1, 9,11], [ 2, 4, 8,10], [13, 3, 6, 7], [15,14,12,16] ], rotate the input matrixin-placesuch 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]