LeetCode in Python 48. Rotate Image/Matrix (旋转图像/矩阵)

这篇具有很好参考价值的文章主要介绍了LeetCode in Python 48. Rotate Image/Matrix (旋转图像/矩阵)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

旋转图像/矩阵的重点是寻找旋转前后对应位置的坐标关系。

示例:

LeetCode in Python 48. Rotate Image/Matrix (旋转图像/矩阵),Leecode题解,leetcode,python,算法,数据结构

图1 旋转图像/矩阵的输入输出示意图 

代码: 

class Solution:
    def rotate(self, matrix):
        n = len(matrix)
        for i in range(n // 2):
            for j in range(i, n - 1 - i):
                topleft = matrix[i][j]
                matrix[i][j] = matrix[n - 1 - j][i]
                matrix[n - 1 - j][i] = matrix[n - 1 - i][n - 1 - j]
                matrix[n - 1 - i][n - 1 - j] = matrix[j][n - 1 - i]
                matrix[j][n - 1 - i] = topleft

解释:

1)外层循环控制需要转的大圈圈数,内层循环控制每一圈需要转的小圈圈数,大小圈数的解释见图2,例如n=4,需要循环n // 2 = 2大圈,其中黄色循环箭头为第一大圈,绿色循环箭头为第二大圈。对于第一大圈,5->11->16->15->5为一小圈,同理1->10->12->13->1、9->7->14->2->9各为一小圈。

LeetCode in Python 48. Rotate Image/Matrix (旋转图像/矩阵),Leecode题解,leetcode,python,算法,数据结构

2)对于如何确定旋转前后位置坐标的对应关系,笔者是通过先确定再确定内层的方法,例如对于第一圈,固定i=0,然后观察大圈位置变化确定对应关系,接着改变i,观察内层圈数与i的对应关系进而修改对应坐标变化,如若先固定外层大圈循环,位置坐标变化应为:

matrix[0][j] = matrix[n - 1 - j][0]
matrix[n - 1 - j][0] = matrix[n - 1 - 0][n - 1 - j]
matrix[n - 1 - 0][n - 1 - j] = matrix[j][n - 1 - 0]
matrix[j][n - 1 - 0] = topleft

接着改变圈数,进入内层大圈循环,修改坐标变化:

matrix[i][j] = matrix[n - 1 - j][i]
matrix[n - 1 - j][i] = matrix[n - 1 - i][n - 1 - j]
matrix[n - 1 - i][n - 1 - j] = matrix[j][n - 1 - i]
matrix[j][n - 1 - i] = topleft

3)为了使算法空间复杂度为O(1),只需将每一次循环的左上角元素保存下来,接着采用逆向循环的顺序调整元素,最后将左上角元素归位即可,如此便无需重新开辟一个O() 空间来保存原始矩阵。

另外附上另一种实现方式:文章来源地址https://www.toymoban.com/news/detail-860355.html

class Solution:
    def rotate(self, matrix: List[List[int]]) -> None:
        """
        Do not return anything, modify matrix in-place instead.
        """
        l, r = 0, len(matrix) - 1
        while l < r:
            for i in range(r - l):
                top, bot = l, r
                topleft = matrix[top][l + i]
                matrix[top][l + i] = matrix[bot - i][l]
                matrix[bot - i][l] = matrix[bot][r - i]
                matrix[bot][r - i] = matrix[top + i][r]
                matrix[top + i][r] = topleft
            l += 1
            r -= 1

到了这里,关于LeetCode in Python 48. Rotate Image/Matrix (旋转图像/矩阵)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Leetcode48旋转图像

    思路:找规律 方法一、一般辅助数组解法 行列转换,第一行变到第三列,第二行变到第二列,第三行变到第一列 matrix[row][col] = matrix[col][n-row-1] 然后复制回原数组 方法二、对角线翻转+左右翻转 矩阵性质,可以发现对角线翻转之后就是逆时针转了九十度,左右再翻转就是顺时

    2024年02月05日
    浏览(38)
  • leetcode48 旋转图像

    leetcode48 旋转图像

    2024年04月14日
    浏览(40)
  • 算法leetcode|48. 旋转图像(rust重拳出击)

    给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。 请不要 使用另一个矩阵来旋转图像。 n == matrix.length == matrix[i].length 1 = n = 20 -1000 = matrix[i][j] = 1000 面对这道算法题目,二当家

    2024年02月01日
    浏览(88)
  • 二刷LeetCode--48. 旋转图像(C++版本),数学题

    思路:主要是观察变化之后的数组和最开始的数组的区别,不难发现,先转置在左右镜像对称即可。需要注意的是转置和镜像对称中for变量的终止条件。

    2024年02月12日
    浏览(39)
  • OpenCV-Python学习(20)—— OpenCV 图像几何变换之图像旋转(cv.warpAffine、cv.getRotationMatrix2D、cv.rotate、np.rot90)

    1. 学习目标 学习旋转矩阵; 学习使用 OpenCV 的 cv.warpAffine 函数进行图片的旋转; 学习使用 OpenCV 的 cv.getRotationMatrix2D 来计算不同旋转中心的不同角度的 MAR 旋转变换矩阵; 学习使用 OpenCV 的 cv.rotate 进行特殊角度的旋转(90,180,270 度)。 2. 不同中心的旋转矩阵计算 2.1 图像

    2024年02月09日
    浏览(40)
  • OpenCV图像旋转(cv::rotate)与镜像(cv::flip)

    案例:使用OpenCV实现图像的旋转和镜像操作 所用函数:这里主要使用到了两个函数 1.旋转:cv::rotate 2.镜像:cv::flip   本文福利, 莬 费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,Q

    2024年02月16日
    浏览(47)
  • 图像分类模型评估之用python绘制混淆矩阵confusion_matrix

    目录 训练完成后,生成混淆矩阵!!!! ImageNet数据格式,生成混淆矩阵!!!! 非 ImageNet数据格式,定义导入数据的类名和方法!!!! 非imageNet数据格式,完成生成混淆矩阵程序代码!!!! 混淆矩阵:是用于评估分类模型性能的一种常用工具,可以用于计算分类准确

    2024年02月01日
    浏览(51)
  • opencv图像旋转和翻转,cv2.flip,cv2.rotate

    目录 翻转图像 图像旋转         opencv中使用cv2.filp可以实现图像翻转 src:输入图像 flipCode:flipCode 一个标志来指定如何翻转数组;0表示上下翻转,正数表示左右翻转,负数表示上下左右都翻转。 dst:输出图像         下面代码对图像进行不同旋转。         opencv中使

    2024年02月15日
    浏览(72)
  • 48. 旋转图像

    给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在** 原地** 旋转图像,这意味着你需要直接修改输入的二维矩阵。 请不要 使用另一个矩阵来旋转图像。 示例 1: 示例 2: 提示: n == matrix.length == matrix[i].length 1 = n = 20 -1000 = matrix[i][j] = 1

    2024年02月15日
    浏览(40)
  • 力扣48. 旋转图像

    思路: 顺时针旋转可以拆解成: 先沿着水平中轴线进行翻转: m[i][j] - m[n - 1 - i][j] (x1 + x2) / 2 = (n - 1) / 2 x1 = (n - 1) - x2 y 轴不变 沿着主对角线进行翻转: m[i][j] - m[j][i] 可以参考坐标变换的变换矩阵

    2024年02月02日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包