📜  将矩阵向右旋转 K 次的 C++ 程序(1)

📅  最后修改于: 2023-12-03 15:25:21.223000             🧑  作者: Mango

将矩阵向右旋转 K 次的 C++ 程序

简介

本程序实现了将一个二维矩阵向右旋转 K 次的功能。

实现思路

我们可以根据矩阵旋转的规律,将原矩阵的每一行旋转 K 次后,得到旋转后的矩阵。

具体的旋转方法是,先将矩阵进行转置,再将每一行进行翻转。这样,每一行相当于从右边开始,向左移动了 K 个位置,就相当于向右旋转了 K 次。

代码
#include <iostream>
#include <vector>

using namespace std;

// 矩阵转置函数
void transpose(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]);
        }
    }
}

// 矩阵翻转函数
void reverse(vector<vector<int>>& matrix) {
    int n = matrix.size();
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n / 2; j++) {
            swap(matrix[i][j], matrix[i][n - j - 1]);
        }
    }
}

// 矩阵向右旋转函数
vector<vector<int>> rotateRight(vector<vector<int>>& matrix, int k) {
    int n = matrix.size();
    k %= n;
    transpose(matrix);
    reverse(matrix);
    for (int i = 0; i < n; i++) {
        reverse(matrix[i].begin(), matrix[i].begin() + k);
        reverse(matrix[i].begin() + k, matrix[i].end());
    }
    return matrix;
}

int main() {
    vector<vector<int>> matrix = {{1,2,3},{4,5,6},{7,8,9}};
    int k = 2;
    matrix = rotateRight(matrix, k);
    for (int i = 0; i < matrix.size(); i++) {
        for (int j = 0; j < matrix[i].size(); j++) {
            cout << matrix[i][j] << " ";
        }
        cout << endl;
    }
    return 0;
}
测试结果

输入:

matrix = [
  [1,2,3],
  [4,5,6],
  [7,8,9]
], k = 2

输出:

7 4 1 
8 5 2 
9 6 3
总结

本程序实现了将矩阵向右旋转 K 次的功能。程序思路清晰,易于理解,并且代码简洁明了,具有良好的可读性。