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

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

旋转矩阵指的是将一个矩阵向右旋转90度的操作,例如:

1 2 3         7 4 1
4 5 6   ==>   8 5 2
7 8 9         9 6 3

如果要将矩阵向右旋转K次,即:

1 2 3         6 9 8  
4 5 6   ==>   3 2 7 
7 8 9         4 5 1 

现在我们来编写一个C++程序实现这个功能。

思路分析

首先将原矩阵转置,然后将每一行翻转。对于翻转k次来说,从右边开始k个元素不动,其余元素向右移动k个位置即可。

代码实现

下面给出C++代码实现:

#include <iostream>
#include <vector>
using namespace std;

class Solution {
public:
    void rotate(vector<vector<int>>& matrix, int k) {
        int n = matrix.size();
        k %= n; // k可能大于n,取余得到真正的旋转次数
        if(k == 0) return; // 如果旋转次数为0,则矩阵不变
        // 沿对角线翻转
        for(int i=0; i<n-1; i++){
            for(int j=0; j<n-i-1; j++){
                swap(matrix[i][j], matrix[n-j-1][n-i-1]);
            }
        }
        // 水平翻转每一行
        for(int i=0; i<n; i++){
            int l=0, r=n-k-1;
            while(l < r) swap(matrix[i][l++], matrix[i][r--]);
            l = n-k, r = n-1;
            while(l < r) swap(matrix[i][l++], matrix[i][r--]);
            l=0, r=n-1;
            while(l < r) swap(matrix[i][l++], matrix[i][r--]);
        }
    }
};

int main(){
    vector<vector<int>> matrix = {{1,2,3},{4,5,6},{7,8,9}};
    Solution s;
    s.rotate(matrix, 2);
    for(int i=0; i<matrix.size(); i++){
        for(int j=0; j<matrix[0].size(); j++){
            cout<<matrix[i][j]<<" ";
        }
        cout<<endl;
    }
    return 0;
}

代码说明

首先我们定义了一个Solution类,其中包含了一个rotate函数,函数接受两个参数:matrix和k。

变量n表示矩阵的长度(行和列个数相等),k可能大于n,因此我们对k取余得到真正的旋转次数。

对于矩阵的旋转操作,我们首先使用两个for循环沿着矩阵的对角线进行翻转,然后再水平翻转每一行。

对于翻转k次来说,从右边开始k个元素不动,其余元素向右移动k个位置即可,这里我们使用了三个循环来实现。

最后我们在main函数中定义了一个3*3的矩阵,并且将k设为2,打印出旋转后的矩阵。

结论

本文介绍了如何使用C++实现将矩阵向右旋转K次的操作。具体方法是将矩阵转置,然后将每一行翻转,对于翻转k次来说,从右边开始k个元素不动,其余元素向右移动k个位置即可。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程

C++ 示例