LeetCode48, wie man die Matrix um 90 Grad dreht

Dieser Artikel stammt aus einem persönlichen öffentlichen Konto : TechFlow , Original ist nicht einfach, suchen Sie Aufmerksamkeit


Heute ist der 29. von LeetCode. Schauen wir uns ein einfaches Matrixrotationsproblem an.

Titel

Die Anforderung des Problems ist sehr einfach: Bei einer zweidimensionalen quadratischen Matrix muss das Ergebnis zurückgegeben werden, nachdem die Matrix um 90 Grad gedreht wurde .

Nachfolgend sehen wir uns zwei Beispiele an:

Lösung

Diese Animation ist auf einen Blick klar, was bedeutet, dass wir eine zweidimensionale Matrix um 90 Grad im Uhrzeigersinn drehen müssen. Wir alle verstehen diese Frage sehr gut, aber es gibt eine Einschränkung in der Frage: Wir können keine anderen Arrays zur Unterstützung beantragen , was unsere Raumnutzung einschränken soll.

Wenn es keine solche Einschränkung gibt, ist es tatsächlich sehr einfach. Wir müssen nur die Position nach jeder Koordinatendrehung berechnen. Wir erstellen ein Array neu und füllen es der Reihe nach.

Wir ignorieren die spezifischen Daten in der Matrix und sehen uns die Koordinatenänderungen vor und nach der Matrixrotation an. Dies sind die Koordinaten vor der Matrixrotation:

Nach der Drehung werden die Koordinaten:

Wenn wir uns die beiden obigen Bilder ansehen, können wir sehen, dass für die Koordinate (i, j) das Ergebnis, das nach dem Drehen um 90 Grad erhalten wird, (j, n-1-i) sein sollte. Hier ist n die Anzahl der Zeilen.

Nachdem wir diese Formel haben, können wir sie weiter fördern. Wir fanden heraus, dass der Punkt an der Position (i, j) nach der Drehung (j, n-1-i) erreichte. Und der Punkt an der Position (j, n-1-i) wird zu (n-1-i, n-1-j) gedreht, und auf die gleiche Weise wird (n-1-i, n-1-j) zu (n) gedreht -1-j, i) und schließlich fanden wir, dass (n-1-j, i) nach der Drehung zu (i, j) zurückkehrte.

Das ist für eine Drehung, (i, j), ( j, n-1-i), (n-1-i, n-1-j), (n-1-j, i) vier Die Elemente in dieser Position tauschten Positionen miteinander und hatten keinen Einfluss auf andere Positionen. Tatsächlich ist dies auch sehr leicht zu verstehen, da das Problem durch eine quadratische Matrix gegeben ist.

Wir verstehen unter folgendem Bild:

Mit anderen Worten, wir müssen nur ein Viertel der Matrix durchlaufen und dann die 4 Positionen erhalten, die durch die Koordinaten ausgetauscht werden, und dann ihre Elemente austauschen.

Code

Der Code ist wirklich einfach, nur ein paar Zeilen:

class Solution:
    def rotate(self, matrix: List[List[int]]) -> None:
        """
        Do not return anything, modify matrix in-place instead.
        """

        n = len(matrix)
        
        # 注意一下范围和下标即可
        for i in range(n//2):
            for j in range(i, n-1-i):
                matrix[i][j], matrix[j][n-1-i], matrix[n-1-i][n-1-j], matrix[n-1-j][i] = \
                matrix[n-1-j][i], matrix[i][j], matrix[j][n-1-i], matrix[n-1-i][n-1-j]

Der heutige Artikel ist genau das. Wenn Sie sich belohnt fühlen, folgen Sie ihm bitte oder veröffentlichen Sie ihn erneut. Ihre Bemühungen sind mir sehr wichtig.

Veröffentlicht 117 Originalartikel · Gefällt mir 61 · Besuche 10.000+

Ich denke du magst

Origin blog.csdn.net/TechFlow/article/details/105475070
Empfohlen
Rangfolge