创建二维矩阵
vector<vector<int>> matrix{{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
上下水平翻转
[
1
2
3
4
5
6
7
8
9
]
\begin{bmatrix}1 & 2 & 3 \\ 4 & 5 & 6 \\ 7 & 8 & 9 \end{bmatrix}
⎣
⎡
1
4
7
2
5
8
3
6
9
⎦
⎤
变成
[
7
8
9
4
5
6
1
2
3
]
\begin{bmatrix}7 & 8 & 9 \\4 & 5 & 6 \\1 & 2 & 3\end{bmatrix}
⎣
⎡
7
4
1
8
5
2
9
6
3
⎦
⎤
只需要
reverse(matrix.begin(),matrix.end());
左右竖直翻转
[
1
2
3
4
5
6
7
8
9
]
\begin{bmatrix}1 & 2 & 3 \\ 4 & 5 & 6 \\ 7 & 8 & 9 \end{bmatrix}
⎣
⎡
1
4
7
2
5
8
3
6
9
⎦
⎤
变成
[
3
2
1
6
5
4
9
8
7
]
\begin{bmatrix} 3 & 2 & 1 \\ 6 & 5 & 4 \\ 9 & 8 & 7 \end{bmatrix}
⎣
⎡
3
6
9
2
5
8
1
4
7
⎦
⎤
for(int i = 0 ; i < matrix.size();i++)
{
reverse(matrix[i].begin(), matrix[i].end());
}
方阵转置
[
1
2
3
4
5
6
7
8
9
]
\begin{bmatrix}1 & 2 & 3 \\ 4 & 5 & 6 \\ 7 & 8 & 9 \end{bmatrix}
⎣
⎡
1
4
7
2
5
8
3
6
9
⎦
⎤
变成
[
1
4
7
2
5
8
3
6
9
]
\begin{bmatrix} 1 & 4 & 7 \\ 2 & 5 & 8 \\ 3 & 6 & 9 \end{bmatrix}
⎣
⎡
1
2
3
4
5
6
7
8
9
⎦
⎤
for (int i = 0; i < matrix.size() -1; i++)
{
for (int j = i + 1; j < matrix.size(); j++)
{
swap(matrix[i][j], matrix[j][i]);
}
}
方阵旋转
-
向右旋转90°:先上下水平翻转 + 再转置。或者先转置 + 再左右竖直翻转。
[1
2
3
4
5
6
7
8
9
]
\begin{bmatrix}1 & 2 & 3 \\ 4 & 5 & 6 \\ 7 & 8 & 9 \end{bmatrix}
⎣
⎡
1
4
7
2
5
8
3
6
9
⎦
⎤
变成
[7
4
1
8
5
2
9
6
3
]
\begin{bmatrix} 7 & 4 & 1 \\ 8 & 5 & 2 \\ 9 & 6 & 3 \end{bmatrix}
⎣
⎡
7
8
9
4
5
6
1
2
3
⎦
⎤
-
向右旋转90°:先左右竖直翻转 + 再转置。或者先转置 + 再上下水平翻转。
[1
2
3
4
5
6
7
8
9
]
\begin{bmatrix}1 & 2 & 3 \\ 4 & 5 & 6 \\ 7 & 8 & 9 \end{bmatrix}
⎣
⎡
1
4
7
2
5
8
3
6
9
⎦
⎤
变成
[3
6
9
2
5
8
1
4
7
]
\begin{bmatrix} 3 & 6 & 9 \\ 2 & 5 & 8 \\ 1 & 4 & 7 \end{bmatrix}
⎣
⎡
3
2
1
6
5
4
9
8
7
⎦
⎤
- 旋转180°:等于上下水平翻转+左右竖直翻转。
题:LC48.旋转图像
// 例子:向右旋转90°
int n = matrix.size();
for (int i = 0; i < n / 2; i++)
{
for (int j = 0; j < n; j++)
{
swap(matrix[i][j], matrix[n - 1 - i][j]);
}
}
for (int i = 0; i < n -1; i++)
{
for (int j = i + 1; j < n; j++)
{
swap(matrix[i][j], matrix[j][i]);
}
}