Как перебрать 2d массив по диагонали сверху вниз слева направо - PullRequest
0 голосов
/ 16 февраля 2019

Я пытаюсь перебрать квадратный двумерный массив для всех диагоналей сверху вниз, слева направо.У меня есть код для перебора слева направо, но мне нужно адаптировать его, чтобы выполнять итерацию другим способом.

public static void main(String[] args) {
       int[][] a = {
                {1,   2,  3,  4},
                {0,   1,  2,  3},
                {-1,  0,  1,  2},
                {-2, -1,  0,  1},
        };
        for (int j = 0; j <= a.length + a.length - 2; j++) {
            for (int k = 0; k <= j; k++) { // cols
                int l = j - k; //  rows
                if (l < a.length && k < a.length) {
                    System.out.print(a[l][k] + " ");
                }
            }
            System.out.println();
        }
}

Результаты:

1 
0 2 
-1 1 3 
-2 0 2 4 
-1 1 3 
0 2 
1 

Что означает диагонали слева направо сверху вниз.Как я могу адаптировать метод для печати диагоналей другим способом, чтобы получить следующие результаты:

-2
-1 -1
0 0 0
1 1 1 1
2 2 2 
3 3
4

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 16 февраля 2019

Просто нужно отразить адрес строки

public static void main(String[] args) {
       int[][] a = {
                {1,   2,  3,  4},
                {0,   1,  2,  3},
                {-1,  0,  1,  2},
                {-2, -1,  0,  1},
        };
        for (int j = 0; j <= a.length + a.length - 2; j++) {
            for (int k = 0; k <= j; k++) { // cols
                int l = j - k; //  rows
                int mirror = a.lenght - l;
                if (mirror >= 0 && mirror < a.length && k < a.length) {
                    System.out.print(a[mirror][k] + " ");
                }
            }
            System.out.println();
        }
}
...