主题切换
矩阵旋转 标准笔记
一、前置概念
1. 矩阵转置
沿主对角线交换元素,行与列互换。 规则:matrix[i][j] 与 matrix[j][i] 互换。
示例
原矩阵
1 2 3
4 5 6
7 8 9
转置后
1 4 7
2 5 8
3 6 92. 行翻转
对单行元素进行左右逆序。 示例
单行
1 4 7
行翻转后
7 4 13. 列翻转
对单列元素进行上下逆序。 示例
单列
1
4
7
列翻转后
7
4
1二、方阵旋转规则
下文规则适用于 n 阶方阵。
1. 顺时针旋转 90 度
操作步骤
- 矩阵转置
- 逐行执行行翻转
完整演示
原矩阵
1 2 3
4 5 6
7 8 9
第一步 转置
1 4 7
2 5 8
3 6 9
第二步 逐行翻转
7 4 1
8 5 2
9 6 32. 逆时针旋转 90 度
操作步骤
- 逐列执行列翻转
- 矩阵转置
完整演示
原矩阵
1 2 3
4 5 6
7 8 9
第一步 逐列翻转
7 2 3
8 5 6
1 4 9
第二步 转置
7 8 1
2 5 4
3 6 93. 旋转 180 度
操作步骤
- 逐行执行行翻转
- 整体上下颠倒,等价逐列翻转
完整演示
原矩阵
1 2 3
4 5 6
7 8 9
第一步 逐行翻转
3 2 1
6 5 4
9 8 7
第二步 整体上下颠倒
9 8 7
6 5 4
3 2 14. 顺时针旋转 270 度
等价于逆时针旋转 90 度,规则同逆时针旋转 90 度。
三、通用代码模板 Java
1. 矩阵转置
java
int n = matrix.length;
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
int temp = matrix[i][j];
matrix[i][j] = matrix[j][i];
matrix[j][i] = temp;
}
}2. 逐行翻转
java
int n = matrix.length;
for (int i = 0; i < n; i++) {
int l = 0;
int r = n - 1;
while (l < r) {
int temp = matrix[i][l];
matrix[i][l] = matrix[i][r];
matrix[i][r] = temp;
l++;
r--;
}
}3. 逐列翻转
java
int n = matrix.length;
for (int j = 0; j < n; j++) {
int t = 0;
int b = n - 1;
while (t < b) {
int temp = matrix[t][j];
matrix[t][j] = matrix[b][j];
matrix[b][j] = temp;
t++;
b--;
}
}四、规则汇总表
| 旋转角度 | 执行顺序 |
|---|---|
| 顺时针 90 度 | 转置 、逐行翻转 |
| 逆时针 90 度 | 逐列翻转 、转置 |
| 180 度 | 逐行翻转 、逐列翻转 |
| 顺时针 270 度 | 逐列翻转 、转置 |