问题:
假设有一个3*3的二维数组,如下
[[1,2,3],
[4,5,6],
[7,8,9]]
现在,请你用最简单的方式顺时针翻转数组90°,使之成为如下
[[7,4,1],
[8,5,2],
[9,6,3]]
解法:
思路:很多朋友第一时间可能会想,翻转90°,就是坐标系变化了,只需要找出翻转后的坐标系和翻转前的规律,然后变换就可以了。是的,这是一种方法,但是,这绝对不是一个简便的方法。
我们先分析一下,翻转后的矩阵是怎么从翻转前矩阵得到的,仔细看一下,会发现,翻转后的矩阵数组,假设是list2,翻转前是list1,会发现,list2[0]是由list1中,每个元素内,的第一位拼接得到。我们很容易就想到一个系统自带函数zip()。
zip()用法:
a=[1,2,3]
b=[4,5,6]
c=zip(a,b) #c = [(1, 4), (2, 5), (3, 6)]
所以,现在旋转矩阵就变得容易了,我们可以利用zip函数快速的实现:
a=[[1,2,3],[4,5,6],[7,8,9]]
d=zip(a[2],a[1],a[0]) #[(7, 4, 1), (8, 5, 2), (9, 6, 3)]
通过上述方式,就能快速的获得顺时针旋转90°后的矩阵数组了。
网友评论