0048-rotate-image¶
Try it on leetcode
Description¶
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(Python)¶
class Solution:
def rotate(self, matrix: List[List[int]]) -> None:
"""
Do not return anything, modify matrix in-place instead.
"""
# Input: matrix = [[1,2,3],[4,5,6],[7,8,9]]
# Output: [[7,4,1],[8,5,2],[9,6,3]]
#
# dignal flip and roatate vertical
# 1 2 3 1
# 3 4 4 2
#
# 1 3
# 2 4
#
# 3 1
# 4 2
# i,j
# 00 01
# 10 11
# i,j = j, i
#
# 3*3
#
# 00
# 0 1 02
# 01 02 03
n = len(matrix)
# dignal flip
for i in range(n): # 0 1 2
for j in range(i): #
if i != j:
matrix[i][j], matrix[j][i] = matrix[j][i], matrix[i][j]
# vertical flip
#
for row in range(n):
i,j = 0, n-1
while i < j:
matrix[row][i], matrix[row][j] = matrix[row][j], matrix[row][i]
i+=1
j-=1