#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. Приветствую вас, за быстрый и четкий ответ. Я ничего не знаю о генераторе, кажусь мощным и спасибо, что рассказали мне об этом.