题目描述:
给定一个 n × n 的二维矩阵表示一个图像。将图像顺时针旋转 90 度。
说明:你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。
示例 1:
给定 matrix = [ [1,2,3], [4,5,6], [7,8,9]],
原地旋转输入矩阵,使其变为:[ [7,4,1], [8,5,2], [9,6,3]]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/rotate-image
算法思路:
在不修改源列表内存地址的情况下可以如此:
class Solution:
def rotate(self, matrix: List[List[int]]) -> None:
"""
Do not return anything, modify matrix in-place instead.
"""
n=len(matrix)
new,l=[],[]
for i in range(n-1,-1,-1):
for j in range(n-1,-1,-1):
l.append(matrix[j][i])
new.insert(0,l[:])
l.clear()
matrix[:]=new
执行用时 :36 ms, 在所有 python3 提交中击败了99.64%的用户
但这样使用了额外的数组,其实不满足题意。
———————————————————————————————————
评论区看到高人的方法,先上下翻转,再沿对角线翻转即可。
class Solution:
def rotate(self, matrix: List[List[int]]) -> None:
matrix[:]=matrix[::-1]
for i in range(len(matrix)):
for j in range(len(matrix)):
if i>j:
matrix[i][j],matrix[j][i]=matrix[j][i],matrix[i][j]
执行用时 :44 ms, 在所有 python3 提交中击败了90.33%的用户