C++矩阵旋转90度
作者:XD / 发表: 2024年11月20日 03:51 / 更新: 2025年2月27日 05:39 / 编程笔记 / 阅读量:1219
题目:
请编写一个函数 rotateMatrix90,将一个 n x n 的二维矩阵顺时针旋转 90 度,并返回旋转后的矩阵。
要求: 1. 原矩阵可以在原地修改,不需要额外的矩阵。 2. 使用 O(1) 的额外空间。
输入示例:
vector< vector< int>> 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< vector< int>>& 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< vector< int>> 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 度旋转。
 

