алгоритм чтения матрицы по диагонали (все диагонали) - PullRequest
0 голосов
/ 29 мая 2020

Мне нужен алгоритм, который может читать матрицу по диагонали (все диагонали).

Пример ввода и вывода:

ввод:

matrix = [
["a", "b", "c", "d"],
["e", "f", "g", "h"],
["i", "j", "k", "l"],
["m", "n", "o", "p"]
 ]

и вывод должно быть так:

["a", "eb", "ifc", "mjgd", "nkh", "ol","p"]

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

Ответы [ 2 ]

0 голосов
/ 29 мая 2020

Лучший способ подумать об этой проблеме состоит в том, что каждая ячейка на одной диагонали должна удовлетворять x+y=d, где d - это индекс диагонали (от 0 до n + m-2 включительно).

Вы может l oop больше d и для каждого dl oop больше x. Используя приведенное выше уравнение, мы получаем: y=d-x. Я предлагаю вам взять бумагу и ручку и самостоятельно вывести ограничения для x.

В любом случае вот рабочий код:

matrix = [
["a", "b", "c", "d"],
["e", "f", "g", "h"],
["i", "j", "k", "l"],
["m", "n", "o", "p"]
 ]

n = len(matrix)
m = len(matrix[0])


res = []
for d in range(n+m-1):
    cur = ""
    for x in range(max(0, d-m+1),min(n, d+1)):
        print(x, d-x)
        cur = matrix[x][d-x] + cur
    print('---')
    res.append(cur)
print(res)

0 голосов
/ 29 мая 2020

Пусть n будет количеством строк (или столбцов), тогда количество диагоналей будет 2*n-1

Для первого символа каждой строки мы go вниз по первому столбцу один раз мы достигаем нижнего левого угла, мы начинаем перемещаться по нижнему ряду

При добавлении символов в строки для каждого [row][column], на котором мы находимся, следующий, который нам нужен go, будет в [row-1][column+1]

Вот пример кода java, который добавляет диагонали в виде строки в массив, а затем выводит массив на стандартный вывод

    public static void main(String[] args){
        int n = 4;  // number of rows
        String array[] = new String[2*n-1];  // array to hold the diagonals
        int arrayIndex = 0; 
        for (int i = 0; i < 2*n-1; i++) {
            if (i < n) {  // until we reach the bottom left corner
                int row = i;  // for each row
                int column = 0;  // start from the left side
                String tmp = "";
                while (row >= 0)
                    tmp += m[row--][column++];
                array[arrayIndex++] = tmp;
            }
            else {  // after we've reached the bottom left corner
                int row = n-1;  // start from the bottom row
                int column = i-n+1;  // for each column
                String tmp = "";
                while (column < n)
                    tmp += m[row--][column++];
                array[arrayIndex++] = tmp;
            }
        }

        // prints out the array
        for (String s : array)
            System.out.print(s + " ");
        System.out.print("\n");
    }

    static String m[][] = {
        {"a", "b", "c", "d"},
        {"e", "f", "g", "h"},
        {"i", "j", "k", "l"},
        {"m", "n", "o", "p"}
    };

Вот как выглядит стандартный вывод

a eb ifc mjgd nkh ol p  

Надеюсь, это поможет :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...