用Java给定一个二维数组,将数组顺时针旋转90度,并返回旋转后的数组
时间: 2024-11-18 16:27:02 浏览: 89
在Java中,我们可以使用数组复制和转置的方式来实现二维数组的顺时针旋转90度。以下是一个简单的示例:
```java
public class ArrayRotation {
public static int[][] rotate(int[][] matrix) {
// 获取矩阵的尺寸
int n = matrix.length;
// 创建一个新的转置矩阵
int[][] rotatedMatrix = new int[n][n];
// 顺时针旋转90度,相当于将原矩阵的行变成新矩阵的列
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
rotatedMatrix[j][n - 1 - i] = matrix[i][j]; // 原来的(row, col)变成了(newCol, newRow)
}
}
return rotatedMatrix;
}
}
```
上述代码定义了一个名为`rotate`的方法,它接受一个二维数组`matrix`作为输入,创建一个新的转置矩阵`rotatedMatrix`,然后通过遍历原矩阵并更新新矩阵的位置来实现顺时针旋转。
相关问题
Java90°旋转二维数组
### Java 中实现二维数组 90 度旋转
在 Java 中,要实现一个二维数组顺时针方向的 90 度旋转,可以采用一种方法是先转置该矩阵再反转每一行。这种方法不仅直观而且易于理解。
对于给定的一个 `n×m` 的二维数组,在执行此操作之前应该注意的是,如果原数组不是正方形,则其尺寸会改变成为 `m×n`。以下是具体的实现方式:
#### 方法描述
1. 转置矩阵:交换每一对 `[i][j]` 和 `[j][i]` 元素的位置;
2. 反转每一行:通过遍历每一行并将其元素顺序颠倒来完成这一步骤;
```java
public class RotateMatrix {
public static void rotate(int[][] matrix) {
int n = matrix.length;
// Transpose the matrix
for (int i = 0; i < n; ++i) {
for (int j = i; j < n; ++j) {
int temp = matrix[i][j];
matrix[i][j] = matrix[j][i];
matrix[j][i] = temp;
}
}
// Reverse each row of transposed matrix to get rotated one.
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n / 2; ++j) {
int temp = matrix[i][j];
matrix[i][j] = matrix[i][n - 1 - j];
matrix[i][n - 1 - j] = temp;
}
}
}
// Utility function to print a matrix
public static void displayMatrix(int[][] mat){
for (var row : mat) {
for (var elem : row) {
System.out.print(elem + " ");
}
System.out.println();
}
}
}
```
这段代码展示了如何定义函数 `rotate()` 来接收一个整数类型的方阵作为参数,并对其进行就地修改以达到顺时针旋转的效果[^1]。此外还提供了一个辅助性的打印功能用于展示变换前后的矩阵形态。
Java 二维数组 旋转
### Java 二维数组旋转
#### 顺时针旋转
对于给定的 `n×n` 的矩阵,可以通过重新分配元素位置来实现顺时针方向上的旋转。具体来说,在新的矩阵中,原矩阵第 `j` 列从上至下的元素会成为新矩阵第 `n-1-i` 行从左往右排列的元素[^1]。
```java
public class MatrixRotation {
public static void rotateClockwise(int[][] matrix) {
int n = matrix.length;
int[][] rotatedMatrix = new int[n][n];
for (int i = 0; i < n; ++i){
for (int j = 0; j < n; ++j){
rotatedMatrix[j][n - 1 - i] = matrix[i][j]; // 将旧矩阵中的(i,j)映射到新矩阵的位置(j,n-1-i)[^2]
}
}
// 打印旋转后的矩阵以便验证结果
printMatrix(rotatedMatrix);
}
private static void printMatrix(int[][] matrix){
for (var row : matrix){
System.out.println(Arrays.toString(row));
}
}
}
```
此代码片段展示了如何通过构建一个新的矩阵并填充相应位置的方法完成一次完整的90度顺时针旋转操作。
#### 逆时针旋转
同样地,为了使矩阵沿逆时针方向旋转90度,则需调整上述逻辑,使得原始矩阵里的每一个元素 `(i, j)` 移动到了目标矩阵里对应的新坐标 `(n-j-1,i)` 上[^4]。
```java
public class MatrixRotation {
public static void rotateCounterClockwise(int[][] matrix) {
int n = matrix.length;
int[][] rotatedMatrix = new int[n][n];
for (int i = 0; i < n; ++i){
for (int j = 0; j < n; ++j){
rotatedMatrix[n - 1 - j][i] = matrix[i][j]; // 把原来的(i,j)移动到(n-1-j,i)
}
}
// 输出旋转后的矩阵供检查
printMatrix(rotatedMatrix);
}
private static void printMatrix(int[][] matrix){
for (var row : matrix){
System.out.println(Arrays.toString(row));
}
}
}
```
这段程序实现了基于相同原理但是不同坐标的变换过程,从而达到了逆时针的效果。
阅读全文
相关推荐
















