Как повернуть 2D-массив на 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
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
1 010
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Это похоже на транспонирование матрицы. Вы можете использовать цикл в цикле или поток в потоке:

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]

Каждая ячейка [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]

See also:
How do I rotate a matrix 90 degrees counterclockwise?
Is there a way to reverse specific arrays in a multidimensional array?

Другие вопросы по теме