二维数组旋转90度,使用指针旋转,算法
时间: 2023-11-10 10:06:34 浏览: 233
假设有一个 $n \times n$ 的二维数组 $matrix$,我们要将其顺时针旋转 $90$ 度,可以通过以下步骤实现:
1. 先将矩阵沿主对角线翻转,即将 $matrix[i][j]$ 与 $matrix[j][i]$ 交换。
2. 再将每一行沿中心线翻转,即将 $matrix[i][j]$ 与 $matrix[i][n-1-j]$ 交换。
代码如下:
```c++
void rotate(int** matrix, int matrixSize, int* matrixColSize){
// Step 1: 沿主对角线翻转
for(int i=0; i<matrixSize; i++){
for(int j=i; j<matrixSize; j++){
int temp = matrix[i][j];
matrix[i][j] = matrix[j][i];
matrix[j][i] = temp;
}
}
// Step 2: 每一行沿中心线翻转
for(int i=0; i<matrixSize; i++){
for(int j=0; j<matrixSize/2; j++){
int temp = matrix[i][j];
matrix[i][j] = matrix[i][matrixSize-1-j];
matrix[i][matrixSize-1-j] = temp;
}
}
}
```
在使用指针旋转的时候,我们需要将二维数组转化为一维指针,这里我们可以使用 $int* matrix$ 来表示二维数组,其中 $matrix[i][j]$ 可以表示为 $matrix[i \times n + j]$,其中 $n$ 表示矩阵的宽度或长度。
代码如下:
```c++
void rotate(int* matrix, int matrixSize, int* matrixColSize){
// Step 1: 沿主对角线翻转
for(int i=0; i<matrixSize; i++){
for(int j=i; j<matrixSize; j++){
int temp = *(matrix + i * matrixSize + j);
*(matrix + i * matrixSize + j) = *(matrix + j * matrixSize + i);
*(matrix + j * matrixSize + i) = temp;
}
}
// Step 2: 每一行沿中心线翻转
for(int i=0; i<matrixSize; i++){
for(int j=0; j<matrixSize/2; j++){
int temp = *(matrix + i * matrixSize + j);
*(matrix + i * matrixSize + j) = *(matrix + i * matrixSize + matrixSize - 1 - j);
*(matrix + i * matrixSize + matrixSize - 1 - j) = temp;
}
}
}
```
阅读全文