Python一行代码解决矩阵旋转的问题
今天刷《剑指offer》的时候碰到这样一道题:
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4X4矩阵:12345678910111213141516则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.
思路:可以模拟魔方逆时针旋转的方法,一直做取出第一行的操作,例如:
123 456 789
利用pop输出并且删除第一行后,再进行一次逆时针旋转,就变成:
69 58 47
然后,继续重复上述操作即可。
最主要的在于实现矩阵的逆时针操作。关于矩阵的旋转有好几种,转置、顺时针、逆时针,下面直接上代码,用一行python代码实现这三种操作。
矩阵转置:
matrix=[[1,2,3],[4,5,6],[7,8,9]] matrix=map(list,zip(*matrix)) print(matrix) >>>[[1,4,7],[2,5,8],[3,6,9]]
矩阵顺时针旋转:先把矩阵上下翻转,然后在转置一下
matrix=[[1,2,3],[4,5,6],[7,8,9]] matrix[:]=map(list,zip(*matrix[::-1])) print(matrix) >>>[[7,4,1],[8,5,2],[9,6,3]]
矩阵逆时针旋转:先把矩阵转置一下,然后在上下翻转
matrix=[[1,2,3],[4,5,6],[7,8,9]] matrix[:]=map(list,zip(*matrix))[::-1] print(matrix) >>>[[3,6,9],[2,5,8],[1,4,7]]
下面是完整的解题代码:
#-*-coding:utf-8-*- classSolution: #matrix类型为二维列表,需要返回列表 defprintMatrix(self,matrix): #writecodehere result=[] while(matrix): result+=matrix.pop(0) ifnotmatrixornotmatrix[0]: break #将矩阵逆时针旋转 matrix[:]=map(list,zip(*matrix))[::-1] returnresult
以上这篇Python一行代码解决矩阵旋转的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。