Skip to content

48. 旋转图像 ​

  • 题号:48
  • 来源:LeetCode
  • 难度:中等
  • 标签:数组 矩阵 原地算法
  • 语言:TypeScript · Python
  • 解法:2 个
  • 作者:lmliheng
  • 最近更新:2026-09-29

TypeScript ​

TypeScript · O(n^2) 时间 · O(1) 空间 · 更新于 2026-09-27

先转置再逐行反转,原地完成

typescript
/**
 * @difficulty medium
 * @tags 数组,矩阵,原地算法
 * @time O(n^2)
 * @space O(1)
 * @note 先转置再逐行反转,原地完成
 * @48. 旋转图像
 */

/**
 * 
 * @原地
 * 利用ij关系先转置再对每行反转
 */
function rotate(matrix: number[][]): void {
    const n = matrix.length;

    // 转置
    for (let i = 0; i < n; i++) {
        for (let j = 0; j < i; j++) {
            [matrix[i][j], matrix[j][i]] = [matrix[j][i], matrix[i][j]];
        }
    }

    // 每行反转(水平翻转)
    for (let i = 0; i < n; i++) {
        matrix[i].reverse();
    }
}

/**
 * 
 * @利用外置map记录关系
 * 多了O(m*n)空间复杂度
 */
function rotate1(matrix: number[][]): void {
    let map = new Map()
    let n = matrix.length
    for (let row = 0; row < n; row++) {
        for (let col = 0; col < n; col++) {
            map.set(`${row},${col}`, matrix[n - col - 1][row])
        }
    }

    for (let row = 0; row < n; row++) {
        for (let col = 0; col < n; col++) {
            matrix[row][col] = map.get(`${row},${col}`)
        }
    }

};

源码:ts/leetcode/48. 旋转图像.ts

Python ​

Python · O(n^2) 时间 · O(1) 空间 · 更新于 2026-09-29

先沿主对角线转置,再逐行反转,原地完成

python
"""
@lc 48
@title 旋转图像
@difficulty medium
@tags 矩阵,原地算法
@time O(n^2)
@space O(1)
@note 先沿主对角线转置,再逐行反转,原地完成
"""
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):
            for j in range(i):
                matrix[i][j], matrix[j][i] = matrix[j][i], matrix[i][j]
    #横向倒叙
        for i in range(n):
            matrix[i].reverse()

源码:python/leetcode/hot100/20.py


在 GitHub 上查看题目所在目录:lmliheng/algorithm