矩阵翻转包括转置、顺时针90°旋转、水平/垂直镜像及副对角线翻转;转置交换ai与aj,仅方阵可原地进行;顺时针90°=转置+每行反转;水平翻转交换第i行与第m-1-i行;垂直翻转即每行反转;副对角线翻转等价于逆时针90°,适用于方阵。

矩阵翻转通常指沿主对角线(转置)、副对角线、水平中线或垂直中线进行对称交换。实际开发中,最常用的是顺时针旋转90度和矩阵转置,二者本质不同但常被混淆。下面分场景说明核心实现逻辑与注意事项。
转置操作(沿主对角线翻转)
将元素 a[i][j] 与 a[j][i] 互换,仅适用于方阵;若为 m×n 矩阵,结果是 n×m 新矩阵。
- 原地转置需保证 i
- 非方阵无法原地完成,必须新建二维数组,新矩阵维度为 [n][m],赋值 newMat[j][i] = oldMat[i][j]
- 示例:[[1,2,3],[4,5,6]] 转置后为 [[1,4],[2,5],[3,6]]
顺时针旋转90度
等价于先转置,再对每行做左右翻转(即反转每一行)。这是面试高频解法,时间复杂度 O(n²),空间复杂度 O(1)(原地)。
- 步骤一:转置(同上)
- 步骤二:对第 i 行执行 reverse(arr[i]),即交换 arr[i][j] 与 arr[i][n-1-j],j ∈ [0, n/2)
- 注意:旋转后行列数可能互换,如 3×4 矩阵旋转后变为 4×3,需重新分配内存或使用新数组
水平/垂直翻转(镜像)
不改变维度,只交换行或列位置,适合图像处理等场景。
- 水平翻转(上下颠倒):交换第 i 行与第 m-1-i 行,i ∈ [0, m/2)
- 垂直翻转(左右颠倒):对每行调用 reverse(),即交换每行中对称列元素
- 两者组合可实现 180° 旋转:先水平再垂直,或反之,效果相同
副对角线翻转(逆时针转置)
将 a[i][j] 与 a[n-1-j][n-1-i] 交换,等价于顺时针旋转270° 或逆时针90°。适用于方阵,且常用于某些图形变换。
- 可分解为三步:水平翻转 → 转置 → 水平翻转;或转置 → 垂直翻转 → 转置
- 直接索引映射更高效:遍历上三角关于副对角线对称区域,即满足 i + j
- 注意边界:副对角线本身(i + j == n - 1)元素不动











