我需要把一个给定的矩阵旋转90度º 逆时针方向,我不知道怎么开始。例如:从这个开始
5 10 8 9 16 30 25 41 7 17 50 12 45 8 22 34
对此:
9 41 12 34 8 25 50 22 10 30 17 8 5 16 7 45
gajydyqb1#
这就像矩阵转置。可以在循环中使用循环,也可以在流中使用流:
int d = 4; int[][] arr1 = { {5, 10, 8, 9}, {16, 30, 25, 41}, {7, 17, 50, 12}, {45, 8, 22, 34} };
int[][] arr2 = new int[d][d]; int[][] arr3 = new int[d][d]; int[][] arr4 = new int[d][d];
IntStream.range(0, d).forEach(i -> IntStream.range(0, d).forEach(j -> { // matrix transpose arr2[j][i] = arr1[i][j]; // turn matrix 90º clockwise arr3[j][d - 1 - i] = arr1[i][j]; // turn matrix 90º counterclockwise arr4[d - 1 - j][i] = arr1[i][j]; }));
Arrays.stream(arr4).map(Arrays::toString).forEach(System.out::println); // [9, 41, 12, 34] // [8, 25, 50, 22] // [10, 30, 17, 8] // [5, 16, 7, 45]
rbl8hiat2#
每个细胞 [i][j] 原来的矩阵变成了一个细胞 [4-1-j][i] 在旋转矩阵中:
[i][j]
[4-1-j][i]
int d = 4; int[][] arr1 = { {5, 10, 8, 9}, {16, 30, 25, 41}, {7, 17, 50, 12}, {45, 8, 22, 34}}; int[][] arr2 = new int[d][d];
for (int i = 0; i < d; i++) for (int j = 0; j < d; j++) arr2[d - 1 - j][i] = arr1[i][j];
for (int row = 0; row < d; row++) System.out.println(Arrays.toString(arr2[row])); // [9, 41, 12, 34] // [8, 25, 50, 22] // [10, 30, 17, 8] // [5, 16, 7, 45]
另请参见:•如何逆时针旋转矩阵90度?•是否有方法反转多维数组中的特定数组?
2条答案
按热度按时间gajydyqb1#
这就像矩阵转置。可以在循环中使用循环,也可以在流中使用流:
rbl8hiat2#
每个细胞
[i][j]
原来的矩阵变成了一个细胞[4-1-j][i]
在旋转矩阵中:另请参见:
•如何逆时针旋转矩阵90度?
•是否有方法反转多维数组中的特定数组?