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

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移到数组的末尾。

让我们来看一个例子:

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

// 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)

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

C++ 示例