给定一个矩阵垫[]的尺寸[] M * N时,任务是打印在顺时针方向上的矩阵了i次的每第i行旋转后得到的矩阵。
例子:
Input: mat[][] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}
Output:
1 2 3
6 4 5
8 9 7
Explanation:
The 0th row is rotated 0 times. Therefore, the 0th row remains the same as {1, 2, 3}.
The 1st row is rotated 1 times. Therefore, the 1st row modifies to {6, 4, 5}.
The 2nd row is rotated 2 times. Therefore, the 2nd row modifies to {8, 9, 7}.
After completing the above operations, the given matrix modifies to {{1, 2, 3}, {6, 4, 5}, {8, 9, 7}}.
Input: mat[][] = {{1, 2, 3, 4}, {4, 5, 6, 7}, {7, 8, 9, 8}, {7, 8, 9, 8}}
Output:
1 2 3 4
7 4 5 6
9 8 7 8
8 9 8 7
处理方法:按照以下步骤解决问题:
- 以 row-wise 方式遍历给定的矩阵,对于每个第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)
如果您想与行业专家一起参加直播课程,请参阅Geeks Classes Live