题源:https://leetcode.cn/problems/rotate-image/description/?envType=study-plan-v2&envId=top-100-liked
思路一:
解题思路:分两步完成旋转
虽然“直接旋转”看起来有点抽象,但我们可以通过两个简单的步骤来实现顺时针旋转 90 度:
✅ 步骤一:转置矩阵(Transpose)
把矩阵的行和列交换,即 matrix[i][j]
和 matrix[j][i]
交换。
✅ 步骤二:每行反转(Reverse Each Row)
对每一行进行翻转,从左到右变成从右到左。
这两个步骤组合起来,就等价于整个矩阵顺时针旋转了 90 度。
✅ 具体实现步骤
第一步:转置矩阵
for i in range(n):
for j in range(i): # 只遍历下三角部分
matrix[i][j], matrix[j][i] = matrix[j][i], matrix[i][j]
j < i
的部分,避免重复交换;第二步:反转每一行
left = 0
right = n - 1
while left <= right:
for i in range(n):
matrix[i][left], matrix[i][right] = matrix[i][right], matrix[i][left]
left += 1
right -= 1
left
和 right
来交换左右两边的列;代码如下:
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)
for i in range(n):
for j in range(i):
matrix[i][j], matrix[j][i] = matrix[j][i], matrix[i][j]
left = 0
right = n - 1
while left <= right:
for i in range(n):
matrix[i][left], matrix[i][right] = matrix[i][right], matrix[i][left]
left += 1
right -= 1