Разбить массив на подмассивы вывести их сумму
Есть массив с 5 чисел
const Arr = [1,2,3,4,5]
Надо написать функцию которая принимает массив Arr и некоторое число k (длина подмассива). Функция перебирает все возможные комбинации подмассива например [1,2,3]; [1,2,4]; [1,2,5] и тд и выводит сумму каждого подмассива. Вообщем нужно посчитать все возможные суммы 3х чисел
Ответы (1 шт):
Будем использовать рекурсию и Set(), чтобы убрать дубликаты. Тут надо думать с конца. Проходимся по каждому массиву, который вернёт нам функция comb(). Дальше проходимся по каждому элементу нашего исходного массива и если такое значение уже есть в массиве (полученного с comb()), то пропускаем эту итерацию. А иначе добавляем в массив.
Перед добавлением надо посортовать, чтобы можно было убирать дубликаты.
function comb(arr, depth) {
const res = new Set();
if (depth === 0) res.add([]);
else {
for (const pc of comb(arr, depth - 1)) {
for (const e of arr) {
if (pc.indexOf(e) !== -1) break;
res.add([e, ...pc].sort((a, b) => a - b));
}
}
}
return res;
}
console.log([...comb([1, 2, 3, 4, 5], 3)].map(e => [e, e.reduce((a, b) => a + b, 0)]));