链接:
题目:
给定一个 n × n 的二维矩阵表示一个图像。
将图像顺时针旋转 90 度。
说明:
你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。
示例 1:
给定 matrix = [ [1,2,3], [4,5,6], [7,8,9] ],
原地旋转输入矩阵,使其变为: [ [7,4,1], [8,5,2], [9,6,3] ]
我的解法:很慢。。一圈为一个单位,
class Solution(object):
def rotate(self, matrix):
for i in range(len(matrix)/2):
k = len(matrix) - i -1
for j in range(k-i):
num_0 = matrix[i+j][k]
matrix[i+j][k] = matrix[i][i+j]
num_1 = matrix[k][k-j]
matrix[k][k-j] = num_0
num_2 = matrix[k-j][i]
matrix[k-j][i] = num_1
matrix[i][i+j] = num_2
别人的解法1: 先reverse一下,[[1 2 3],[4 5 6],[7 8 9]]的原矩阵变为[[7 8 9],[4 5 6],[1 2 3]]. 再沿着左上到右下的切线把矩阵对称翻转
class Solution(object):
def rotate(self, matrix):
matrix.reverse()
print matrix
n=len(matrix)
for i in range(0,n):
for j in range(i+1,n):
matrix[i][j],matrix[j][i]=matrix[j][i],matrix[i][j]
别人的解法2: matrix[::-1]表示matrix.reverse()
class Solution(object):
def rotate(self, matrix):
matrix[::] = zip(*matrix[::-1])
补充zip用法:
>>> a = [1,2,3]
>>> b = [4,5,6]
>>> c = [4,5,6,7,8]
>>> zipped = zip(a,b) # 打包为元组的列表
[(1, 4), (2, 5), (3, 6)]
>>> zip(*zipped) # 与 zip 相反,可理解为解压,返回二维矩阵式
[(1, 2, 3), (4, 5, 6)]
>>> zip(a,c) # 元素个数与最短的列表一致
[(1, 4), (2, 5), (3, 6)]