📅  最后修改于: 2023-12-03 15:25:21.223000             🧑  作者: Mango
本程序实现了将一个二维矩阵向右旋转 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 次的功能。程序思路清晰,易于理解,并且代码简洁明了,具有良好的可读性。