Я пытался решить следующую проблему с помощью возврата:
Позвольте нам сказать, что вам дано число N, вы должны найти число
разные способы записать это как сумму 1, 3 и 4.
Вот моя попытка:
const backtrack = (array, index, result = [], sum) => {
if (index >= array.length || sum < 0) {
return 0;
}
if (sum === 0) {
console.log(result);
return 1;
}
return (
backtrack(array, index, result.concat(array[index]), sum - array[index]) +
backtrack(array, index + 1, result, sum)
);
};
Ввод
const array = [1, 3, 4];
const index = 0;
const sum = 5;
выход
[ 1, 1, 1, 1, 1 ]
[ 1, 1, 3 ]
[ 1, 4 ]
3
Как вы видите результат, есть только половина количества комбинаций.
Недостающие комбинации:
[ 1, 3, 1 ]
[ 3,1,1]
[ 4, 1 ]
Я могу объяснить, почему это так, поскольку мое правое поддерево вызывается с использованием backtrack(array, index + 1, result, sum)
который ищет элементы с индексом больше текущего. Может ли кто-нибудь дать мне подсказку об изменениях, которые мне нужно сделать для достижения желаемого результата?