顺时针旋转N * N 的矩阵

顺时针旋转

题目描述

复制代码
有一个NxN整数矩阵,请编写一个算法,将矩阵顺时针旋转90度。给定一个NxN的矩阵,和矩阵的阶数N,请返回旋转后的NxN矩阵。

数据范围

复制代码
0<n<300,矩阵中的值满足 0≤val≤1000

实现逻辑

  • 行列转换

    复制代码
      '''
      1 2 3       7 4 1
      4 5 6   --> 8 5 2
      7 8 9       9 6 3     
      '''
      # 第N列逆序后变成第N行
      # 或者是第 i 行变成第 N - i - 1 列

代码实现

python 复制代码
class Solution:
    # 列转换为行
    def line2Row(self, mat, n):
        arr = []
        for line in range(n):
            tmp = []
            # 第line列
            for row in range(n):
                tmp.append(mat[row][line])
            arr.append(tmp[::-1])
        return arr    
    # 行转换为列
    def row2Line(self, mat, n):
        arr = [[0] * n for _ in range(n)]
        for row in range(n):
            for line in range(n):
            # 行列转换
                arr[line][n - 1 -row] = mat[row][line]
        return arr    
    def rotateMatrix(self , mat: List[List[int]], n: int) -> List[List[int]]:
        # write code here
        '''
        1 2 3      7 4 1
        4 5 6  --> 8 5 2
        7 8 9      9 6 3     
        '''
        # 第N列逆序后变成第N行
        arr = self.row2Line(mat, n)
        return arr        
arr, n = [[1,2,3],[4,5,6],[7,8,9]],3
s = Solution()
res = s.rotateMatrix(arr)
print(res)