C++程序 将矩阵向右旋转K次
给定大小为N*M的矩阵和数字K。我们必须将矩阵向右旋转K次。
示例:
输入: N = 3, M = 3, K = 2
12 23 34
45 56 67
78 89 91
输出: 23 34 12
56 67 45
89 91 78
输入: N = 2, M = 2, K = 2
1 2
3 4
输出: 1 2
3 4
一种简单而有效的方法是将矩阵的每一行视为数组,并执行数组旋转。这可以通过将元素从K到数组的末尾复制到使用临时数组的数组的开始来完成。然后将剩余元素从开头到K-1移到数组的末尾。
让我们来看一个例子:
// CPP program to rotate a matrix right by k times // CPP程序将矩阵向右旋转k次
#include <iostream>
// size of matrix // 矩阵的大小
#define M 3
#define N 3
using namespace std;
// function to rotate matrix by k times // 将矩阵旋转k次的函数
void rotateMatrix(int matrix[][M], int k) {
// temporary array of size M // 大小为M的临时数组
int temp[M];
// within the size of matrix // 矩阵的大小之内
k = k % M; // 取模
for (int i = 0; i < N; i++) { // 遍历矩阵的每一行
// copy first M-k elements to temporary array // 将前M-k个元素复制到临时数组
for (int t = 0; t < M - k; t++)
temp[t] = matrix[i][t];
// copy the elements from k to end to starting // 将k到末尾的元素复制到开始
for (int j = M - k; j < M; j++)
matrix[i][j - M + k] = matrix[i][j];
// copy elements from temporary array to end // 将临时数组中的元素复制到末尾
for (int j = k; j < M; j++)
matrix[i][j] = temp[j - k];
}
}
// function to display the matrix // 显示矩阵的函数
void displayMatrix(int matrix[][M]) {
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++)
cout << matrix[i][j] << " ";
cout << endl;
}
}
// Driver's code // 驱动程序的代码
int main() {
int matrix[N][M] = {{12, 23, 34},
{45, 56, 67},
{78, 89, 91}};
int k = 2;
// rotate matrix by k // 将矩阵旋转k次
rotateMatrix(matrix, k);
// display rotated matrix // 显示旋转后的矩阵
displayMatrix(matrix);
return 0;
}
输出:
23 34 12
56 67 45
89 91 78
时间复杂度: O(N*M)
辅助空间: O(M)