美文网首页
LeetCode 48. 旋转图像

LeetCode 48. 旋转图像

作者: 草莓桃子酪酪 | 来源:发表于2022-08-25 00:32 被阅读0次
题目

给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。

例:
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[[7,4,1],[8,5,2],[9,6,3]]

方法一:辅助函数
  • n 表示矩阵的行/列数
  • temp 表示一个行列和给出矩阵 matrix 相同的矩阵,区别在于此矩阵的元素均为零
  • 外部循环遍历矩阵 matrix 的行,内部循环遍历矩阵 matrix 的列
    • 根据上面的例子我们可以推出:位于矩阵第 i 行第 j 列的元素,在矩阵经过顺时针旋转九十度后 ,该元素的位置为倒数第 i 列第 j 行
  • 将新矩阵 temp 赋值给旧矩阵 matrix
    因为需要原矩阵 matrix 的地址的内容改变,所以不能直接赋值,直接赋值则会导致 matrix 指向 temp 的地址的内容
class Solution(object):
    def rotate(self, matrix):
        n = len(matrix)
        temp = [[0] * n for row in range(n)]
        for i in range(n):
            for j in range(n):
                temp[j][n-i-1] = matrix[i][j]
        matrix[:] = temp

此方法不合题意

方法二:翻转
  • n 表示矩阵的行/列数
  • 对矩阵 matrix 进行水平翻转,外循环对行遍历,内循环对列遍历
    • 位于矩阵第 i 行第 j 列的元素,在矩阵经过水平翻转后 ,该元素的位置为倒数第 i 行第 j 列
  • 对矩阵 matrix 进行主对角线翻转,外循环对行遍历,内循环对列遍历
    • 位于矩阵第 i 行第 j 列的元素,在矩阵经过主对角线翻转后 ,该元素的位置为第 j 行第 i 列
class Solution(object):
    def rotate(self, matrix):
        n = len(matrix)
        for i in range(n//2):
            for j in range(n):
                matrix[i][j], matrix[n-i-1][j] = matrix[n-i-1][j], matrix[i][j]
        for i in range(n):
            for j in range(i):
                matrix[i][j], matrix[j][i] = matrix[j][i], matrix[i][j]

具体例子见链接

相关知识
  • 拷贝:
    引用拷贝(直接赋值): 二者指向同一对象
    浅拷贝: 二者是一个独立的对象,但他们的子对象还是指向统一对象(是引用)
    深拷贝: 二者是完全独立的对象
参考

代码相关:https://leetcode.cn/problems/rotate-image/solution/xuan-zhuan-tu-xiang-by-leetcode-solution-vu3m/
拷贝:https://blog.csdn.net/xiaoma_bk/article/details/121466987

相关文章

网友评论

      本文标题:LeetCode 48. 旋转图像

      本文链接:https://www.haomeiwen.com/subject/uvgngrtx.html