📌  相关文章
📜  通过沿顺时针方向将i行精确旋转i次来修改矩阵

📅  最后修改于: 2021-05-17 03:07:09             🧑  作者: Mango

给定一个矩阵垫[]的尺寸[] M * N时,任务是打印在顺时针方向上的矩阵了i次的每第i行旋转后得到的矩阵。

例子:

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

  • 以行方式遍历给定矩阵,对于i行,执行以下步骤:
    • 反转矩阵的当前行。
    • 反转当前行的前i个元素。
    • 反转当前行的最后(N – i)个元素,其中N是该行的当前大小。
  • 完成上述步骤后,打印矩阵mat [] []

下面是上述方法的实现:

C++
// C++ program for the above approach
 
#include 
using namespace std;
 
// Function to rotate every i-th
// row of the matrix i times
void rotateMatrix(vector >& 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 > mat
        = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
    rotateMatrix(mat);
 
    return 0;
}


Java
// java program for the above approach
import java.io.*;
import java.lang.*;
import java.util.*;
 
class GFG {
 
  // Function to reverse arr[] from start to end
  static void reverse(int arr[], int start, int end)
  {
    while (start < end) {
      int temp = arr[start];
      arr[start] = arr[end];
      arr[end] = temp;
      start++;
      end--;
    }
  }
 
  // Function to rotate every i-th
  // row of the matrix i times
  static void rotateMatrix(int mat[][])
  {
    int i = 0;
 
    // Traverse the matrix row-wise
    for (int rows[] : mat) {
 
      // Reverse the current row
      reverse(rows, 0, rows.length - 1);
 
      // Reverse the first i elements
      reverse(rows, 0, i - 1);
 
      // Reverse the last (N - i) elements
      reverse(rows, i, rows.length - 1);
 
      // Increment count
      i++;
    }
 
    // Print final matrix
    for (int rows[] : mat) {
      for (int cols : rows) {
        System.out.print(cols + " ");
      }
      System.out.println();
    }
  }
 
  // Driver Code
  public static void main(String[] args)
  {
 
    int mat[][] = { { 1, 2, 3 },
                   { 4, 5, 6 },
                   { 7, 8, 9 } };
 
    rotateMatrix(mat);
  }
}
 
// This code is contributed by Kingash.


Python3
# Python3 program for the above approach
 
# Function to rotate every i-th
# row of the matrix i times
def rotateMatrix(mat):
     
    i = 0
    mat1 = []
 
    # Traverse the matrix row-wise
    for it in mat:
 
        # Reverse the current row
        it.reverse()
 
        # Reverse the first i elements
        it1 = it[:i]
        it1.reverse()
 
        # Reverse the last (N - i) elements
        it2 = it[i:]
        it2.reverse()
 
        # Increment count
        i += 1
        mat1.append(it1 + it2)
 
    # Print final matrix
    for rows in mat1:
        for cols in rows:
            print(cols, end = " ")
 
        print()
 
# Driver Code
if __name__ == "__main__":
 
    mat = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ]
     
    rotateMatrix(mat)
 
# This code is contributed by ukasp


输出:
1 2 3 
6 4 5 
8 9 7

时间复杂度: O(M * N)
辅助空间: O(1)