如何将5X5
矩阵沿顺时针方向旋转45
度?
输入如下:
00100
00100
11111
00100
00100
输出应该是这样的:
10001
01010
00100
01010
10001
到目前为止我所做的是我已经读取了 5X5
数组的元素,现在我已经坚持了旋转逻辑。
我的代码如下:
import java.awt.Point;
import java.util.Scanner;
public class RotateMatrix {
public static void main(String a[]) {
int[][] original = new int[5][5];
int[][] rotate = new int[5][5];
String helper[] = new String[5];
Scanner sc = new Scanner(System.in);
for (int i = 0; i < 5; i++) {
helper[i] = sc.next();
}
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
original[i][j] = Integer.parseInt(String.valueOf(helper[i].charAt(j)));
}
}
}
}
最佳答案
假设“旋转45度”意味着外边框上的条目应该保留在外边框上,那么您需要做的是:
- 将 5x5 外环旋转 2 个位置
- 将 3x3 内环旋转 1 个位置
外 5x5 环像这样旋转:
01234 23456
F 5 1 7
E 6 => 0 8
D 7 F 9
CBA98 EDCBA
您可以使用 for 循环来完成此旋转。这个以顶部、右侧和底部为例:
for (int i = 0; i < 5; i++) {
if (i < 3) {
rotate[0][i] = original[0][i+2]; // TOP
rotate[i][4] = original[i+2][4]; // RIGHT
rotate[4][4-i] = original[4][4-(i+2)]; // BOTTOM
} else {
rotate[0][i] = original[i-2][4]; // TOP
rotate[i][4] = original[4][4-(i-2)]; // RIGHT
rotate[4][4-i] = original[4-(i-2)][0]; // BOTTOM
}
}
添加代码以填充 rotate
的左侧以及旋转内部 3x3 环的代码后,您就完成了!
这可能需要相当多的代码。您可能想要创建一个将矩阵的任意环旋转 1 的方法。然后您将调用此方法 3 次:在内环上调用一次,在外环上调用两次,以便它旋转 2。
关于java - 逆时针方向旋转矩阵元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60883969/