Создать уникальную пару на основе предоставляющего массива

#algorithm

#алгоритм

Вопрос:

Я не смог решить этот вопрос. Ищу помощи эксперта по алгоритмам. Было бы здорово, если бы решение было предоставлено на javascript, но это не имеет значения.

Заданный ввод:

 [
 [1,2,3]
 [4,5,6]
 [7,8]
 ...
]
  

Ожидаемый результат:

 [
 [1,4,7]
 [1,4,8]
 [1,5,7]
 [1,5,8]
 [1,6,7]
 [1,6,8]
 [2,4,7]
 [2,4,8]
 [2,5,7]
 [2,5,8]
 [2,6,7]
 [2,6,8]
 [3,4,7]
 [3,4,8]
 [3,5,7]
 [3,5,8]
 [3,6,7]
 [3,6,8]
] 
  

Комментарии:

1. Просто используйте 3 вложенных цикла. Здесь не нужен эксперт по алгоритмам.

2. @NikolasCharalambidis Обратите внимание ... на входное описание. Сколько вложенных циклов вам нужно для их обработки?

3. Я сосредоточился в основном на результате. Рекурсия должна сделать это.

4. @n.’местоимения’m. Николас прокомментировал вопрос до того, как я его отредактировал. Мой плохой, я не сформулировал свой вопрос четко ранее.

Ответ №1:

Вы можете использовать рекурсивную функцию. Здесь я решил реализовать его как генератор, используя * и yield . Вызывающий может либо выполнить итерацию результата функции непосредственно с for помощью цикла, либо превратить его в массив:

 function * generateCombis(data) {
    if (data.length === 0) return yield [];
    let [arr, ...rest] = data;
    for (let val of arr) {
        for (let combi of generateCombis(rest)) {
            yield [val, ...combi];
        }
    }
}

let data = [
 [1,2,3],
 [4,5,6],
 [7,8]
];

let result = Array.from(generateCombis(data));

console.log(result);  

Комментарии:

1. Приветствую вас, за быстрый и четкий ответ. Я ничего не знаю о генераторе, кажусь мощным и спасибо, что рассказали мне об этом.