鏈接:
題目:
給定一個 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)]