C++矩阵旋转90度
作者:XD / 发表: 2024年11月20日 03:51 / 更新: 2024年11月20日 03:52 / 编程笔记 / 阅读量:100
题目:
请编写一个函数 rotateMatrix90
,将一个 n x n
的二维矩阵顺时针旋转 90 度,并返回旋转后的矩阵。
要求: 1. 原矩阵可以在原地修改,不需要额外的矩阵。 2. 使用 O(1) 的额外空间。
输入示例:
vector> matrix = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
输出示例:
{
{7, 4, 1},
{8, 5, 2},
{9, 6, 3}
}
提示:
1. 可以先对矩阵进行转置(行列互换),然后翻转每一行来实现旋转。
2. 该方法适用于 n x n
的矩阵。
解答示例代码:
#include < vector>
#include < algorithm>
#include < iostream>
using namespace std;
void rotateMatrix90(vector>& matrix) {
int n = matrix.size();
// 转置矩阵
for (int i = 0; i < n; ++i) {
for (int j = i + 1; j < n; ++j) {
swap(matrix[i][j], matrix[j][i]);
}
}
// 每一行翻转
for (int i = 0; i < n; ++i) {
reverse(matrix[i].begin(), matrix[i].end());
}
}
// 测试代码
int main() {
vector> matrix = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
rotateMatrix90(matrix);
// 输出结果
for (const auto& row : matrix) {
for (int num : row) {
cout << num << " ";
}
cout << endl;
}
return 0;
}
代码解释:
- 转置矩阵:对矩阵进行转置操作,将行和列交换。
- 翻转每一行:使用
reverse
函数翻转每一行,从而实现 90 度旋转。