最高效稳妥的原地旋转法是先转置再行翻转:遍历主对角线右上方交换元素完成转置,再对每行双指针翻转;分层四点交换虽空间更优但易错;直接坐标映射会覆盖原值,违背O(1)空间要求。

直接按坐标映射逐个赋值容易覆盖原值,真正高效又稳妥的做法是把旋转拆成两步:先转置,再翻转每行。
转置 + 行翻转:最直观的原地解法
这是面试和工程中首选的方法,逻辑清晰、代码简短、不易出错。
- 转置操作:遍历主对角线右上方区域,交换 matrix[i][j] 和 matrix[j][i](注意 j 从 i+1 开始,避免重复或自换)
- 行翻转:对每一行调用 reverse,或手动双指针交换首尾元素
- 两步合起来正好等价于顺时针旋转 90°,数学上可严格证明
分层四点交换:空间更省,但边界易错
把 n×n 矩阵看作 (n//2) 层同心正方形,每层处理一圈,每次移动四个角上的元素。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 外层循环控制层数:i 从 0 到 n//2 − 1
- 内层循环遍历该层上边(不含右顶点),用 offset 计算其余三点位置
- 一次临时变量即可完成 top→right→bottom→left→top 的轮换
- 适合想深入理解坐标变换关系的场景,但下标推导稍繁琐
别碰“直接映射”:覆盖风险高
有人试图直接按 (i, j) → (j, n−1−i) 写循环,但这样会提前覆盖还没读取的原始值,必须借助额外数组或复杂缓存策略,违背原地要求。
- 哪怕只缓存一行,也破坏了 O(1) 空间复杂度
- 除非题目允许新建矩阵,否则这条路实际不可行
扩展支持其实很简单
同一套思路稍作调整就能支持其他常见变换:
- 逆时针 90°:先转置,再翻转每列(或等价为每行逆序后整体垂直翻转)
- 180°:直接水平翻转 + 垂直翻转,或两次 90°
- 270°:等价于逆时针 90°,也可用三次顺时针 90°

















