1. 程式人生 > >【leetcode】#陣列【Python】48. Rotate Image 旋轉影象

【leetcode】#陣列【Python】48. Rotate Image 旋轉影象

連結:

題目:

給定一個 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)]