Leetcode 48(12-19-2020) Python

48. 旋转图像

给定一个 *n *× n 的二维矩阵表示一个图像。
将图像顺时针旋转 90 度。

说明:
你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。

示例 1:给定 matrix = [[1,2,3],[4,5,6],[7,8,9]],

原地旋转输入矩阵,使其变为:
[[7,4,1],[8,5,2],[9,6,3]]

示例 2:
给定 matrix =[[ 5, 1, 9,11],[ 2, 4, 8,10],[13, 3, 6, 7],[15,14,12,16]],

原地旋转输入矩阵,使其变为:
[[15,13, 2, 5],[14, 3, 4, 1],[12, 6, 8, 9],[16, 7,10,11]]

解题思路:

  1. 列变行,第一列变第一行
  2. 2次翻转代替旋转
  3. 原地旋转【见参考2】

代码:

class Solution:
    def rotate(self, matrix: List[List[int]]) -> None:
        """
        Do not return anything, modify matrix in-place instead.
        """
        l = len(matrix)
        
        res = [i for i in matrix]
        matrix.clear()

        for i in range(l):
            x = []
            j = l - 1
            while j >= 0:
                x.append(res[j][i])
                j -= 1
            matrix.append(x)
            i -= 1
n = len(matrix)
        # Python 这里不能 matrix_new = matrix 或 matrix_new = matrix[:] 因为是引用拷贝
        matrix_new = [[0] * n for _ in range(n)]
        for i in range(n):
            for j in range(n):
                matrix_new[j][n - i - 1] = matrix[i][j]
        # 不能写成 matrix = matrix_new
        matrix[:] = matrix_new

参考资料:

[1]https://leetcode-cn.com/problems/rotate-image/solution/xuan-zhuan-tu-xiang-by-leetcode-solution-vu3m/
[2]https://zhuanlan.zhihu.com/p/138182746

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容