Leetcode刷题记录31——旋转图像

题源:https://leetcode.cn/problems/rotate-image/description/?envType=study-plan-v2&envId=top-100-liked

题目描述:
Leetcode刷题记录31——旋转图像_第1张图片

思路一:

解题思路:分两步完成旋转
虽然“直接旋转”看起来有点抽象,但我们可以通过两个简单的步骤来实现顺时针旋转 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
  • 使用双指针 leftright 来交换左右两边的列;
  • 每次交换完一行的所有元素后,向中间移动指针;
  • 最终整行就被翻转了。

代码如下:

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

执行时间如下:
Leetcode刷题记录31——旋转图像_第2张图片

你可能感兴趣的:(Leetcode刷题记录,leetcode,算法,职场和发展)