leetcode:アレイ48画像回転

タイトル

あなたが与えられている  n個の  Xは  N  、2D画像を表す行列しました。

90度(時計回り)で画像を回転させます。

注意:

あなたは、画像を回転する必要が  インプレースあなたは2Dが直接行列の入力を変更しなければならないことを意味します、。 しないでください  他の2D行列を割り当てて、回転を行います。

例1:

与えられた入力行列 =
[
  [1,2,3]
  [4,5,6]
  [7,8,9]
]、

入力行列を回転させるには、場所、それがなるように:
[
  [7,4,1]
  [8,5,2]
  [9,6,3]
]

例2:

与えられた入力行列 =
[
  [5、1、9,11]
  [2、4、8,10]
  [13、3、6、7]
  [15,14,12,16]
]、 

入力行列を回転させるには、場所、それがなるように:
[
  [15,13、2、5]、
  [14、3、4、1]
  [12、6、8、9]
  [16、7,10,11]
]

思考

この問題は、余分なスペース行列を使用することはできません。だから、アイデアは次のとおりです。

ターン完成外輪、総回転数N / 2回回す、回転当たりの桁数が徐々に減少します

答え

class Solution:
    def rotate(self, matrix: List[List[int]]) -> None:
        """
        i 列 <- n-i-1 行 
        j 行 <- j 列
        
        (j,i) = (n-i-1,j)   
        """

        n = len(matrix)
        r = n // 2 + int(n % 2 > 0)
        for r_n in range(r):
            for i in range(n- r_n*2 - 1):
                temp = matrix[r_n][i+r_n]
                matrix[r_n][i+r_n] = matrix[n-i-r_n-1][r_n]
                matrix[n-i-r_n-1][r_n] = matrix[n-r_n-1][n-i-r_n-1]
                matrix[n-r_n-1][n-i-r_n-1] = matrix[i+r_n][n-r_n-1] 
                matrix[i+r_n][n-r_n-1] = temp
        

 

公開された45元の記事 ウォンの賞賛1 ビュー3374

おすすめ

転載: blog.csdn.net/qq_22498427/article/details/104471294