136. Rotate Image
View on NeetCode
View on LeetCode
Problem
You are given an n x n 2D matrix representing an image, rotate the image by 90 degrees (clockwise).
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:
Input: matrix = [[1,2,3],[4,5,6],[7,8,9]]
Output: [[7,4,1],[8,5,2],[9,6,3]]
Example 2:
Input: matrix = [[5,1,9,11],[2,4,8,10],[13,3,6,7],[15,14,12,16]]
Output: [[15,13,2,5],[14,3,4,1],[12,6,8,9],[16,7,10,11]]
Constraints:
n == matrix.length == matrix[i].length1 <= n <= 20-1000 <= matrix[i][j] <= 1000
Solution
Approach 1: Transpose + Reverse
The key insight is that a 90-degree clockwise rotation can be achieved by:
- Transposing the matrix (swap rows and columns)
- Reversing each row
Implementation
class Solution:
def rotate(self, matrix: List[List[int]]) -> None:
"""
Do not return anything, modify matrix in-place instead.
"""
n = len(matrix)
# Transpose matrix
for i in range(n):
for j in range(i + 1, n):
matrix[i][j], matrix[j][i] = matrix[j][i], matrix[i][j]
# Reverse each row
for i in range(n):
matrix[i].reverse()
Approach 2: Layer by Layer Rotation
class Solution:
def rotate(self, matrix: List[List[int]]) -> None:
n = len(matrix)
# Process each layer
for layer in range(n // 2):
first = layer
last = n - 1 - layer
for i in range(first, last):
offset = i - first
# Save top
top = matrix[first][i]
# left -> top
matrix[first][i] = matrix[last - offset][first]
# bottom -> left
matrix[last - offset][first] = matrix[last][last - offset]
# right -> bottom
matrix[last][last - offset] = matrix[i][last]
# top -> right
matrix[i][last] = top
Approach 3: Four-way Swap
class Solution:
def rotate(self, matrix: List[List[int]]) -> None:
n = len(matrix)
for i in range(n // 2):
for j in range(i, n - i - 1):
# Four-way swap
temp = matrix[i][j]
matrix[i][j] = matrix[n - 1 - j][i]
matrix[n - 1 - j][i] = matrix[n - 1 - i][n - 1 - j]
matrix[n - 1 - i][n - 1 - j] = matrix[j][n - 1 - i]
matrix[j][n - 1 - i] = temp
Complexity Analysis
Transpose + Reverse:
- Time Complexity: O(n²), where n is the dimension of the matrix. We visit each cell once.
- Space Complexity: O(1), in-place rotation.
Layer by Layer:
- Time Complexity: O(n²), process each element once.
- Space Complexity: O(1), in-place rotation.
Key Insights
-
Transformation Decomposition: A 90° clockwise rotation equals transpose + reverse rows.
-
Mathematical Mapping: Element at (i, j) moves to (j, n-1-i) in a clockwise rotation.
-
In-Place Requirement: We must swap elements rather than creating a new matrix.
-
Layer Processing: For layer-by-layer approach, process outer layers first, moving inward.
-
Four Elements at Once: Each rotation operation can swap 4 elements simultaneously.
-
Edge Cases: Handle both odd and even dimensions correctly (center element stays in place for odd n).
-
Alternative Rotations: For counter-clockwise, reverse rows then transpose (or transpose then reverse columns).