Leetcode-48-旋转图像

利用转置+反转来实现顺时针旋转功能,emmm真有趣

我的答案

1
2
3
4
5
6
7
8
9
10
11
12
13
class Solution:

def rotate(self, matrix):

"""

:type matrix: List[List[int]]

:rtype: void Do not return anything, modify matrix in-place instead.

"""

matrix[::] = zip(*matrix[::-1])

总结:

这题主要有两种方法,一种是zip库的使用,另外一种就是寻找转换的规则。此处总结一下zip的使用,本题主要是用zip实现列表的转置,然后再对转置后的列表进行反转达到旋转效果。

1.zip使用

1
2
3
4
5
6
7
8
9
10
11
a= [1,2,3]

b=[4,5,6]

c=[7,8,9]



zip(a,b,c)

\# ([1,4,7],[2,5,8],[3,6,9])

zip()函数起一个打包的作用,按照其参数中最短的参数进行匹配

详情可参考:http://www.runoob.com/python/python-func-zip.html

2.利用切片赋值反转

切片反转的使用很简单,list[::-1],但是本题的要求是不产生额外的空间,因此就使用了切片赋值的概念来实现

切片赋值与直接创建引用赋值不一样,切片赋值会赋值多一块内存地址,相当于较深拷贝(copy())

深拷贝(deepcopy)和较深拷贝(copy)最大的区别在于会不会把第二层可变对象中的内存地址拷贝过来。其中深拷贝会全部拷贝,但是较深拷贝不会