C++程序 在顺时针方向将第 i 行正好旋转 i 次以修改矩阵

C++程序 在顺时针方向将第 i 行正好旋转 i 次以修改矩阵

给定一个维度为 M x N 的矩阵 mat[][] ,任务是打印出每一个 i th 行旋转 i 次之后得到的矩阵。

例子:

输入: mat[][] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}

输出:

1 2 3

6 4 5

8 9 7

解释:

第 0 行旋转 0 次。因此第 0 行保持不变 {1, 2, 3}。

第 1 行旋转 1 次。因此第 1 行修改为 {6, 4, 5}。

第 2 行旋转 2 次。因此第 2 行修改为 {8, 9, 7}。

完成上述操作后,给定矩阵变为{{1, 2, 3}, {6, 4, 5}, {8, 9, 7}}。

输入: mat[][] = {{1, 2, 3, 4}, {4, 5, 6, 7}, {7, 8, 9, 8}, {7, 8, 9, 8}}

输出:

1 2 3 4

7 4 5 6

9 8 7 8

8 9 8 7

方法: 按以下步骤解决问题。

  • 按行为单位遍历矩阵,并对于每一个 i th 行,执行以下操作:
    • 反转当前行。
    • 反转当前行的前 i 个元素。
    • 反转当前行的后面 (N – i) 个元素,这里 N 是当前行的长度。
  • 完成上述步骤后,打印矩阵 mat[][]

以下是上述方法的 C++ 实现:

// C++ program for the above approach

#include <bits/stdc++.h>
using namespace std;

// Function to rotate every i-th
// row of the matrix i times
void rotateMatrix(vector<vector<int> >& mat)
{
    int i = 0;

    // Traverse the matrix row-wise
    for (auto& it : mat) {

        // Reverse the current row
        reverse(it.begin(), it.end());

        // Reverse the first i elements
        reverse(it.begin(), it.begin() + i);

        // Reverse the last (N - i) elements
        reverse(it.begin() + i, it.end());

        // Increment count
        i++;
    }

    // Print final matrix
    for (auto rows : mat) {
        for (auto cols : rows) {
            cout << cols << " ";
        }
        cout << "\n";
    }
}

// Driver Code
int main()
{
    vector<vector<int> > mat
        = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
    rotateMatrix(mat);

    return 0;
}
// 以上方法的Java程序
 
import java.util.*;
 
class Main {
    // 按顺时针方向旋转矩阵第i行i次的函数
    static void rotateMatrix(List<List<Integer> > mat)
    {
        int i = 0;
 
        // 按行方式遍历矩阵
        for (List<Integer> it : mat) {
            // 反转当前行
            Collections.reverse(it);
 
            // 反转前面i个元素
            Collections.reverse(it.subList(0, i));
 
            // 反转最后(N-i)个元素
            Collections.reverse(it.subList(i, it.size()));
 
            // 计数器加1
            i++;
        }
 
        // 输出最终矩阵
        for (List<Integer> rows : mat) {
            for (int cols : rows) {
                System.out.print(cols + " ");
            }
            System.out.println();
        }
    }
 
    // 主程序
    public static void main(String[] args)
    {
        List<List<Integer> > mat = new ArrayList<>();
        mat.add(Arrays.asList(1, 2, 3));
        mat.add(Arrays.asList(4, 5, 6));
        mat.add(Arrays.asList(7, 8, 9));
        rotateMatrix(mat);
    }
}  

输出:

1 2 3 
6 4 5 
8 9 7

时间复杂度 : O(N*M),因为我们使用嵌套循环遍历N*M次。

辅助空间 : O(1),因为我们没有使用任何额外的空间。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

C++ 示例