题目描述
把 n×n 矩阵顺时针旋转 90 度,要求原地修改。
matrix = [[1,2],[3,4]]
输出 = [[3,1],[4,2]]
思路解析
关键不是背模板,而是看懂为什么这题适合矩阵 · 原地旋转。
1. 原矩阵每个格子都有坐标:原矩阵每个格子都有坐标
2. 顺时针旋转可拆成转置 + 翻转:顺时针旋转可拆成转置 + 翻转
3. 转置:转置:matrix[i][j] 和 matrix[j][i] 交换
4. 对角线上的元素不动:对角线上的元素不动
5. 转置后行列互换:转置后行列互换
6. 再把每一行左右反转:再把每一行左右反转
7. 第一行反转,元素到达目标列:第一行反转,元素到达目标列
8. 所有行反转后完成 90 度旋转:所有行反转后完成 90 度旋转
把这句话记住,下次遇到同类题,就能更快选出方向。
用一个小问题检查自己是不是真的懂了。
参考代码(Python)
Python
1class Solution:
2 def rotate(self, matrix):
3 n = len(matrix)
4 for i in range(n):
5 for j in range(i + 1, n):
6 matrix[i][j], matrix[j][i] = matrix[j][i], matrix[i][j]
7 for row in matrix:
8 row.reverse()复杂度分析
- 时间复杂度:O(n²) —— 每个核心状态按算法要求处理固定次数
- 空间复杂度:O(1) —— 只保存必要的辅助结构或递归栈
套路模板
模板不是死背,而是提醒你写代码前先把状态、转移和边界排好。
Python
1# 矩阵 · 原地旋转 通用检查表
2# 1. 定义状态/指针/容器
3# 2. 每轮只做一个清晰动作
4# 3. 更新答案并处理边界易错点
- 错误写法:新建一个矩阵再拷回 → 正确写法:原地题用转置加翻转(额外矩阵不符合原地要求)
- 错误写法:只按样例推代码 → 正确写法:先写清状态含义和边界条件(样例太少,隐藏用例专打边界)
- 错误写法:变量名和动画不一致 → 正确写法:代码变量沿用动画里的核心名字(学习时最怕脑内维护两套概念)
以上文字与上方动画完全同一思路:先看动画建立直觉 → 读文字巩固 → 关掉页面自己默写一遍代码,能写出来才算真的掌握。