Rotate Image
https://leetcode.com/problems/rotate-image/
Solution 1: Rotate Groups of Four Cells
n = len(matrix)
for i in range(n // 2 + n % 2):
for j in range(i, n - i - 1):
(
matrix[i][j],
matrix[j][-(i + 1)],
matrix[-(i + 1)][-(j + 1)],
matrix[-(j + 1)][i],
) = (
matrix[-(j + 1)][i],
matrix[i][j],
matrix[j][-(i + 1)],
matrix[-(i + 1)][-(j + 1)],
)The key lies in carefully examine the range for i and j! Draw matrices of different sizes and experiment with the indices. Complexity = as each cell is processed once.
Solution 2: Transpose and Reflect
def transpose(matrix):
n = len(matrix)
for i in range(n):
for j in range(i + 1, n):
matrix[j][i], matrix[i][j] = matrix[i][j], matrix[j][i]
def reflect(matrix):
n = len(matrix)
for i in range(n):
for j in range(n // 2):
(
matrix[i][j],
matrix[i][-j - 1]
) = (
matrix[i][-j - 1],
matrix[i][j],
)
def rotate(matrix):
transpose(matrix)
reflect(matrix)Same complexity but twice as many read/write access.