首页 > 解决方案 > 如何将二维阵列逆时针旋转 90º?

问题描述

我需要将给定的矩阵逆时针旋转 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

标签: javaarraysmatrixmultidimensional-arrayrotation

解决方案


这就像一个矩阵转置。您可以在循环中使用循环,或在流中使用流

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]

推荐阅读