在 C++ 中旋转矩阵 90 度,不使用任何额外空间
我们得到一个二维数组,它将用于形成矩阵模式。任务是将矩阵逆时针旋转 90 度,使第一行成为第一列,第二行成为第二列,第三行成为第三列,挑战在于我们不必使用任何额外空间。
让我们看看这个各种输入输出场景:
输入:
int arr[row_col_size][row_col_size] = { { 5, 1, 4},
{ 9, 16, 12 },
{ 2, 8, 9}}输出:
Rotation of a matrix by 90 degree without using any extra space is: 4 12 9 1 16 8 5 9 2
解释:我们得到一个整数类型的二维数组。现在我们将矩阵顺时针旋转 90 度。
Before rotation-:
{ { 5, 1, 4},
{ 9, 16, 12 },
{ 2, 8, 9}}
After rotation-:
2 12 9
1 16 8
5 9 2输入:
int arr[row_col_size][row_col_size] = { { 2, 1, 9},
{ 11, 6, 32 },
{ 3, 7, 5}}输出:
Rotation of a matrix by 90 degree in clockwise direction without using any extra space is: 9 32 5 1 6 7 2 7 3
解释:我们得到一个整数类型的二维数组。现在我们将矩阵顺时针旋转 90 度。
Before rotation-:
{ { 2, 1, 9},
{ 11, 6, 32 },
{ 3, 7, 5}}
After rotation-:
9 32 5
1 6 7
2 7 3下面程序中使用的方法如下:
1. 朴素方法
输入一个将被视为具有 row_col_size 行列的矩阵的二维整数数组。
将数据传递给函数 Rotate_ClockWise(arr)。
在函数 Rotate_ClockWise(arr) 内部:
从 i = 0 开始循环,直到 i 小于 row_col_size/2。
在循环内,从 j = 0 开始另一个循环,直到 j 小于 row_col_size - i - 1。
在循环内,设置 ptr 为 arr[i][j],arr[i][j] 为 arr[row_col_size - 1 - j][i],arr[row_col_size - 1 - j][i] 为 arr[row_col_size - 1 - i][row_col_size - 1 - j],arr[row_col_size - 1 - i][row_col_size - 1 - j] 为 arr[j][row_col_size - 1 - i],arr[j][row_col_size - 1 - i] 为 ptr。
从 i = 0 开始循环,直到 i 小于 row_col_size。在循环内,从 j = 0 开始另一个循环,直到 j 小于 row_col_size;j++ 并打印 arr[i][j]。
2. 高效方法
输入一个将被视为具有 row_col_size 行列的矩阵的二维整数数组。
将数据传递给函数 Rotate_ClockWise(arr)。
在函数 Rotate_ClockWise(arr) 内部:
从 i = 0 开始循环,直到 i 小于 row_col_size。
在循环内,从 j = 0 开始另一个循环,直到 j 小于 row_col_size - i。
在循环内,设置 ptr 为 arr[i][j],arr[i][j] 为 arr[row_col_size - 1 - j]arr[row_col_size - 1 - i],[row_col_size - 1 - j] 为 arr[j][row_col_size - 1 - i] 为 ptr。
从 i = 0 开始循环,直到 i 小于 row_col_size / 2。在循环内,从 j = 0 开始另一个循环,直到 j 小于 row_col_size。在循环内,设置 ptr 为 arr[i][j],arr[i][j] 为 arr[row_col_size - 1 - i][j],arr[row_col_size - 1 - i][j] 为 ptr。
从 i = 0 开始循环,直到 i 小于 row_col_size。在循环内,从 j = 0 开始另一个循环,直到 j 小于 row_col_size;j++ 并打印 arr[i][j]。
朴素方法
示例
#include <bits/stdc++.h>
using namespace std;
#define row_col_size 3
void Rotate_ClockWise(int arr[row_col_size][row_col_size]){
for(int i = 0; i < row_col_size / 2; i++){
for(int j = i; j < row_col_size - i - 1; j++){
int ptr = arr[i][j];
arr[i][j] = arr[row_col_size - 1 - j][i];
arr[row_col_size - 1 - j][i] = arr[row_col_size - 1 - i][row_col_size - 1 - j];
arr[row_col_size - 1 - i][row_col_size - 1 - j] = arr[j][row_col_size - 1 - i];
arr[j][row_col_size - 1 - i] = ptr;
}
}
}
int main(){
int arr[row_col_size][row_col_size] = { { 5, 1, 4},{ 9, 16, 12 },{ 2, 8, 9}};
Rotate_ClockWise(arr);
cout<<"Rotation of a matrix by 90 degree in clockwise direction without using any extra space is: \n";
for(int i = 0; i < row_col_size; i++){
for(int j = 0; j < row_col_size; j++){
cout << arr[i][j] << " ";
}
cout << '\n';
}
return 0;
}输出
如果我们运行上面的代码,它将生成以下输出:
Rotation of a matrix by 90 degree in clockwise direction without using any extra space is: 2 9 5 8 16 1 9 12 4
高效方法
示例
#include <bits/stdc++.h>
using namespace std;
#define row_col_size 3
void Rotate_ClockWise(int arr[row_col_size][row_col_size]){
for(int i = 0; i < row_col_size; i++){
for(int j = 0; j < row_col_size - i; j++){
int ptr = arr[i][j];
arr[i][j] = arr[row_col_size - 1 - j][row_col_size - 1 - i];
arr[row_col_size - 1 - j][row_col_size - 1 - i] = ptr;
}
}
for(int i = 0; i < row_col_size / 2; i++){
for(int j = 0; j < row_col_size; j++){
int ptr = arr[i][j];
arr[i][j] = arr[row_col_size - 1 - i][j];
arr[row_col_size - 1 - i][j] = ptr;
}
}
}
int main(){
int arr[row_col_size][row_col_size] = { { 5, 1, 4},{ 9, 16, 12 },{ 2, 8, 9}};
Rotate_ClockWise(arr);
cout<<"Rotation of a matrix by 90 degree in clockwise direction without using any extra space is: \n";
for(int i = 0; i < row_col_size; i++){
for(int j = 0; j < row_col_size; j++){
cout << arr[i][j] << " ";
}
cout << '\n';
}
return 0;
}输出
如果我们运行上面的代码,它将生成以下输出:
Rotation of a matrix by 90 degree in clockwise direction without using any extra space is: 2 9 5 8 16 1 9 12 4
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP