我有以下代码:
const findMult_3 = (num) => {
const powerset = (set) => {
const combinations = []
const combine = (prefix, chars) => {
for (let i = 0; i < chars.length; i++) {
combinations.push(prefix + chars[i])
combine(prefix + chars[i], chars.slice(i + 1))
}
}
combine('', set)
return combinations
}
const allCombinations = powerset(num.toString().split(''))
console.log(allCombinations)
}
findMult_3(362)
我希望它能工作,但是,输入 362
,函数控制台记录:
[ '3', '36', '362', '32', '6', '62', '2' ]
它缺少 63、23、26
等变体。看来 slice
调用是罪魁祸首?
最佳答案
仍然不能 100% 确定 slice
调用的问题是什么,但我通过回避问题和避免改变我的数组来修复它:
const findMult_3 = (num) => {
const powerset = (set) => {
const combinations = []
const combine = (prefix, chars) => {
for (let i = 0; i < chars.length; i++) {
combinations.push(prefix + chars[i])
combine(prefix + chars[i], chars.filter((x, ind) => ind !== i))
}
}
combine('', set)
return combinations
}
const allCombinations = powerset(num.toString().split(''))
console.log(allCombinations)
}
findMult_3(362)
注意使用filter
而不是splice
,保持不变性。
关于javascript - 这种组合生成递归有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51723173/