目录
方法1:非原地
class Solution(object):
def rotate(self, matrix):
"""
:type matrix: List[List[int]]
:rtype: None Do not return anything, modify matrix in-place instead.
"""
#第i行j列的位置旋转后是倒数第i列第j行
#即matrix[i][j]=new[j][n-i-1]
#使用辅助数组(非原地),遍历一遍矩阵,再放回去
n=len(matrix)
new=[[0]*n for _ in range(n)]
for i in range(n):
for j in range(n):
new[j][n-i-1]=matrix[i][j]
#python不能直接矩阵整体拷贝
matrix[:]=new
return matrix
方法2:原地
class Solution(object):
def rotate(self, matrix):
"""
:type matrix: List[List[int]]
:rtype: None Do not return anything, modify matrix in-place instead.
"""
n=len(matrix)
tep=0
#原地旋转,先转置,再对称交换列
#转置
for i in range(n):
for j in range(i+1,n):
tep=matrix[j][i]
matrix[j][i]=matrix[i][j]
matrix[i][j]=tep
#对称交换列
for j in range(0,n/2):
for i in range(n):
tep=matrix[i][j]
matrix[i][j]=matrix[i][n-j-1]
matrix[i][n-j-1]=tep
return matrix
方法3:融合大佬的做法
转置矩阵关键代码
matrix=[list(row) for row in zip(*matrix)]
class Solution:
def rotate(self, matrix: List[List[int]]) -> None:
"""
Do not return anything, modify matrix in-place instead.
"""
n=len(matrix)
tep=0
#原地旋转,先转置,再对称交换列
#转置(包快的呀)
matrix=[list(row) for row in zip(*matrix)]
#对称交换列
for j in range(0,n//2):
for i in range(n):
tep=matrix[i][j]
matrix[i][j]=matrix[i][n-j-1]
matrix[i][n-j-1]=tep