This exercise assesses the your ability to manipulate matrices, work with indices, and perform in-place modifications efficiently.

Solution 1

This solution first transposes the matrix by swapping elements across the main diagonal. Then, it reverses each row to achieve the 90-degree clockwise rotation.

Below is a Python implementation of the rotate function to rotate a given matrix by 90 degrees clockwise in-place:

from typing import List

def rotate(matrix: List[List[int]]) -> None:
    n = len(matrix)

    # Transpose the matrix
    for i in range(n):
        for j in range(i, n):
            matrix[i][j], matrix[j][i] = matrix[j][i], matrix[i][j]

    # Reverse each row
    for i in range(n):
        matrix[i].reverse()

# Example usage:
matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]

rotate(matrix)
print(matrix)

Time Complexity:

The time complexity of this solution is O(n^2), where n is the number of rows or columns in the matrix.

Space Complexity:

The space complexity is O(1) since the rotation is done in-place without using extra space.

Solution 2

There is a more intuitive solution that maps the index one by one. However, it is less space-efficient, with a space complexity of O(n^2).

from typing import List

def rotate(matrix: List[List[int]]) -> None:
    n = len(matrix)

    # Rotate the matrix
    result = [[0 for i in range(n)] for i in range(n)]
    for i in range(n):
        for j in range(n):
            result[i][j] = matrix[n-1-j][i]
    
    # Put it back
    for i in range(n):
        for j in range(n):
            matrix[i][j] = result[i][j]