给你一幅由 N × N 矩阵表示的图像,其中每个像素的大小为 4 字节。请你设计一种算法,将图像旋转 90 度。
1.最容易想到的暴力法。仔细看矩阵下标会发现,90°旋转是将[i][j]位置的值置换成[n-j-1][i]位置的值(n为长度)
class Solution:
def rotate(self, matrix: List[List[int]]) -> None:
"""
Do not return anything, modify matrix in-place instead.
"""
import copy
tmp=copy.deepcopy(matrix)
n = len(matrix)
for i in range(n):
for j in range(n):
tmp[i][j] = matrix[n-j-1][i]
for i in range(n):
for j in range(n):
matrix[i][j] = tmp[i][j]
ps:上面用了一个复制矩阵,因为我不会创建一个同样规格的矩阵哭了。这样好像很麻烦的样子。因为要在原矩阵修改,就再换一遍。
import numpy as np x,y = map(int,input().split()) a = np.ones((x+1,y+1))
pss:上面这样就能生成一个x*y的全一矩阵,然后再换值也行。不过好像也挺麻烦。
2.先横向镜面翻转,再对角线翻转。
n = len(matrix)
# 先在横向上进行镜面翻转
for i in range(n // 2):
for j in range(n):
tmp = matrix[i][j]
matrix[i][j] = matrix[n - 1 - i][j]
matrix[n - 1 - i][j] = tmp
# 然后沿对角线翻转
for i in range(n):
for j in range(i):
matrix[j][i], matrix[i][j] = matrix[i][j], matrix[j][i]
3.先对角线翻转,再行revers
class Solution:
def rotate(self, matrix: List[List[int]]) -> None:
"""
Do not return anything, modify matrix in-place instead.
"""
n = len(matrix)
for i in range(n):
for j in range(i, n, 1):
matrix[i][j], matrix[j][i] = matrix[j][i], matrix[i][j]
for i in range(n):
matrix[i].reverse()



