旋转一个M*N的二维数组
时间: 2023-11-19 11:07:00 浏览: 88
可以将二维数组看做是由若干个环组成的,每个环的边界上的元素进行旋转即可。假设要将二维数组顺时针旋转90度,可以按照以下步骤进行操作:
1. 定义四个变量分别表示当前环的上下左右边界,初始时上边界为0,下边界为M-1,左边界为0,右边界为N-1。
2. 从左到右遍历上边界,将上边界上的元素逆时针旋转90度并存储到新的数组中。
3. 从上到下遍历右边界,将右边界上的元素逆时针旋转90度并存储到新的数组中。
4. 从右到左遍历下边界,将下边界上的元素逆时针旋转90度并存储到新的数组中。
5. 从下到上遍历左边界,将左边界上的元素逆时针旋转90度并存储到新的数组中。
6. 判断是否还有未遍历的环,若有则将上下左右边界向内缩一位,继续进行步骤2-5,直到遍历完所有环为止。
最终得到的新数组即为旋转后的二维数组。
相关问题
m*n二维数组旋转python
旋转一个m * n的二维数组可以通过以下步骤来实现:
首先,我们需要创建一个新的n * m的二维数组来存放旋转后的结果。然后,我们可以利用两层循环来遍历原始数组中的每一个元素,并根据旋转规则将它放到新数组的相应位置上。假设原始数组为arr,旋转后的数组为rotated_arr,则可以使用以下代码实现:
```python
def rotate_array(arr):
m, n = len(arr), len(arr[0])
rotated_arr = [[0] * m for _ in range(n)]
for i in range(m):
for j in range(n):
rotated_arr[j][m-1-i] = arr[i][j]
return rotated_arr
```
上述代码中,我们首先创建了一个n * m的新二维数组rotated_arr,然后通过两层循环遍历原始数组arr,根据旋转规则将arr中的每个元素放到rotated_arr的相应位置上。在代码中,arr[i][j]被放到rotated_arr[j][m-1-i]的位置上,这个位置正是旋转后的坐标位置。最后返回旋转后的数组rotated_arr即可。
这样,我们就成功地实现了一个m * n的二维数组旋转的功能。这个方法可以适用于任意大小的二维数组,并且旋转的时间复杂度为O(m * n),非常高效。
提供一个将二维数组m x n旋转90,180,270的C函数
以下是一个将m x n的二维数组旋转90度、180度和270度的C函数:
```c
void rotate(int matrix[][n], int m, int n, int degree) {
int temp[m][n];
switch (degree) {
case 90:
// 顺时针旋转90度
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
temp[j][m - 1 - i] = matrix[i][j];
}
}
break;
case 180:
// 顺时针旋转180度
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
temp[m - 1 - i][n - 1 - j] = matrix[i][j];
}
}
break;
case 270:
// 顺时针旋转270度
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
temp[n - 1 - j][i] = matrix[i][j];
}
}
break;
default:
// 错误的角度
printf("Invalid degree\n");
return;
}
// 将旋转后的数组复制回原数组
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
matrix[i][j] = temp[i][j];
}
}
}
```
该函数接收旋转角度作为参数,根据角度进行不同的处理,最后将结果复制回原数组。注意,该函数只支持90度、180度和270度的旋转。如果需要支持其他角度的旋转,需要修改函数实现。