48. 旋转图像

给定一个 × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 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]]

示例 3

输入:matrix = [[1]]

输出:[[1]]

示例 4

输入:matrix = [[1,2],[3,4]]

输出:[[3,1],[4,2]]

思路:

旋转矩阵有两类解决办法,但是每一类方法都不是一下子可以想出来的,还是说要对套路有个印象。

第一类是常规办法,我们得知道顺时针旋转矩阵等价于:先把矩阵转置,再每一行倒置。知道这一点后,再对矩阵操作就可以了。

第二类方法,用了python的zip操作,zip操作是一个对于列表进行压缩或者合并的操作。如对于给定矩阵:matrix = [[1,2],[3,4]],我们使用zip(*matrix),可以得到[(1,3),(2,4)]。

通过一定的实践后,直接上结论:

逆时针旋转:matrix[:] = zip(*matrix)[::-1]  先zip,再逆序

顺时针旋转:matrix[:] = zip(*matrix[::-1])  先逆序,再zip

注意:zip 方法在 Python 2 Python 3 中的不同:在 Python 3.x 中为了减少内存,zip() 返回的是一个对象。如需展示列表,需手动 list() 转换。

即python3中,一般是list(zip())配合使用。

代码:

法1

class Solution(object):def rotate(self, matrix):#法1:三次逆时针 等于一次顺时针for i in range(3):#一次逆时针,先zip再逆序matrix[:]=zip(*matrix)[::-1]#原地修改 加上[:]

法2

class Solution(object):def rotate(self, matrix):#一次顺时针 先逆序 再zipmatrix[:]=list(zip(*matrix[::-1]))

法3

class Solution(object):def rotate(self, matrix):row,col=len(matrix),len(matrix[0])for i in range(row):for j in range(i+1,col):matrix[i][j],matrix[j][i]=matrix[j][i],matrix[i][j]for i in range(row):matrix[i]=matrix[i][::-1]

小结:

注意,这个题也是要求我们原地修改矩阵,所以要用切片来完成。

法3应该是我们优先采用的标准做法,中规中矩的实现。

法1法2可以作为扩展和炫技使用~

旋转图像 顺时针与逆时针方法相关推荐

  1. js判断多边形的坐标点是顺时针还是逆时针的两种方法

    js判断多边形的坐标点是顺时针还是逆时针的两种方法 关键算法 通过极值点与其相邻点的构成的矢量走向算出多边形走向 通过计算各左边点所在矢量夹角的角度总和来推算多边形走向 由于arcgis对顺时针生成的 ...

  2. 旋转角度如何知道是顺时针还是逆时针旋转?(仅供参考,更靠谱的是旋转轴到z轴正半轴上)

    a和b向量在x-y平面内 要确定向量的旋转方向(顺时针或逆时针),可以使用右手定则. 在三维空间中,假设您的右手放在绕旋转轴旋转的向量上.如果您的大拇指指向旋转轴的正方向,那么旋转方向是逆时针:如果您 ...

  3. 调整文字框顺序,返回顺时针或逆时针顺序

    除了用标准文字检测数据集时,自己的数据集有时文字框点的顺序会不按照顺时针或者逆时针.这会导致训练报错或者可视化时出现问题. 我没找到很方便的代码,所以提供一下我自己写的这个代码,可以将文字框的四个点调 ...

  4. 向量叉乘判断两向量之间是顺时针还是逆时针

    转自http://blog.163.com/shiliping_007/blog/static/25772011201071744031933/ 向量积 a x b = (^n) * |a| * |b ...

  5. 判断两个平面向量之间夹角是顺时针还是逆时针

    判断两个向量之间夹角是顺时针还是逆时针 利用平面向量的叉乘 a = (x1,y1) b = (x2,y2) a×b = x1y2 - x2y1 若结果为正,则向量b在a的逆时针方向 否则,b在a的顺时 ...

  6. 如何判断某个物体当前是顺时针还是逆时针旋转

    #region[来自某位道友的求助]Vector3 _scale;int zero = 0;void Awake(){_scale = transform.localEulerAngles;}priv ...

  7. Unity跟随鼠标顺时针或逆时针旋转之美

    下面要分享的是在开发过程中如何跟随鼠标实现顺时针或逆时针旋转. 代码如下: using System.Collections; using System.Collections.Generic; us ...

  8. 神奇旋转,告诉我她是顺时针还是逆时针旋转

    告诉我她是顺时针还是逆时针旋转,快被这个女人逼疯了 ^_^!! 一张图分出你是用左脑还是右脑 如果你看见这个舞女是顺时针转,说明你用的是右脑: 如果是逆时针转,说明你用的左脑. 耶鲁大学耗时5年的研究 ...

  9. css动画--使用图标进行顺时针与逆时针转圈

    css动画–使用图标进行顺时针与逆时针转圈 说明:上面顺时针,下面图逆时针 代码如下: <template><div style="width:1300px;height: ...

  10. 如何顺时针或者逆时针记录多边形的每个点

    问题定义: 按照顺时针或者逆时针提取多边形的各个顶点 问题解决: 针对一个凸多边形,假设多边形的中心为C,多边形的任意一个顶点为A 做一个辅助点,假设有一条水平线通过中心点C,并在c点右边设一个B点 ...

最新文章

  1. 用java向mysql数据库中插入数据为空
  2. 微信公众号开发 微信消息回复开发 文本消息 图片消息开发
  3. HIVE QL 杂记
  4. 2021全球开放数据应用创新大赛开启,300万+奖金等你来拿!
  5. Spring Boot 应用系列 1 -- Spring Boot 2 整合Spring Data JPA和Druid,双数据源
  6. oracle 之 using 使用
  7. OpenCV学习笔记五-图像混合
  8. 【BZOJ4547】【HDU5171】小奇的集合,暴力+矩阵乘法
  9. solr6.6 solrJ索引富文本(word/pdf)文件
  10. android定义键盘示例(斗地主或跑得快的记牌器)
  11. 人民大学联合今目标成立企业行为研究中心
  12. Linux PCI驱动编写
  13. 备案服务器查询网站,网站服务器备案查询
  14. [渝粤教育] 新乡医学院 医学微生物学 参考 资料
  15. 广域网接口是不是wan_什么是WAN(广域网)?
  16. 苹果手机语音备忘录在哪_苹果手机的录音功能在哪?教你快速开启,想录音太方便了...
  17. 安卓大作业-字典App 可以查询汉字 可以玩成语接龙游戏
  18. 收集一些练习英语口语的资料和美剧
  19. 怎么学好Web前端开发 有哪些相关书籍推荐
  20. MySQL在RR级别下到底有没有修复幻读

热门文章

  1. 虚拟手游服务器,自己搭建手机游戏服务器
  2. 梦幻手游登录显示服务器爆满,梦幻西游手游服务器爆满怎么办
  3. Asio Basic Asio Anatomy
  4. 姿态(Orientation)
  5. 一篇学完:王道考研408计算机网络(全)
  6. python英雄对战代码_Python爬虫获取op.gg英雄联盟英雄对位胜率代码
  7. 知识付费平台的三种商业模式
  8. 什么时间做职业生涯规划最合适?
  9. 快速排序(填坑法的两种写法以及交换法)
  10. 【第十八题】填坑I(北理工/北京理工大学/程序设计方法与实践/小学期 )