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}`)
}
}
};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