实现矩阵顺时针旋转90度(二维数组)
时间: 2024-10-19 16:10:12 浏览: 99
为了实现矩阵顺时针旋转90度,你可以采用两种常见方法:使用临时数组交换元素,或者直接修改原数组。这里我会提供两种方法的示例:
**方法一:创建临时数组交换元素**
```java
public int[][] rotateMatrix(int[][] matrix) {
if (matrix == null || matrix.length == 0) {
return matrix;
}
int n = matrix.length;
int[][] rotated = new int[n][n];
for (int i = 0; i < n; i++) {
for (int j = 0; j < i; j++) {
// 交换原矩阵对角线上的元素
rotated[j][n - i - 1] = matrix[i][j];
}
for (int k = i; k < n - 1; k++) {
rotated[k + 1][n - i - 1] = matrix[i][k + 1];
}
rotated[n - i - 1][n - 1] = matrix[i][n - 1];
}
// 将上三角填满剩余元素(从右下到左上)
for (int i = 0, j = n - 1; i < n / 2; i++, j--) {
rotated[i][j] = matrix[i][j];
}
return rotated;
}
```
**方法二:直接修改原矩阵(适用于小型矩阵)**
```java
public void rotateInPlace(int[][] matrix) {
if (matrix == null || matrix.length == 0) {
return;
}
int n = matrix.length;
for (int layer = 0; layer < n / 2; layer++) {
for (int offset = 0; offset < n - 1 - layer - offset]; // 右上角元素
int bottomLeft = matrix[n - 1 - layer - offset][layer]; // 左下角元素
// 交换四个角的元素
matrix[layer][n - 1 - layer - offset] = bottomLeft;
matrix[n - 1 - layer - offset][layer] = topRight;
int target = layer + offset; // 目标位置
int temp = matrix[target][layer + 1 + offset]; // 中间的元素
// 把中间元素向右上方移动
matrix[target][layer + 1 + offset] = topRight;
// 把右上角元素向下移动
matrix[target + 1][layer + 1 + offset] = topRight;
// 把目标位置的元素移到最后
matrix[layer + 1 + offset][target] = temp;
}
}
}
```
这两种方法都实现了矩阵顺时针旋转90度,第一个方法创建了新的矩阵,第二个方法直接操作原矩阵。
阅读全文