前端算法之穷举
决策树的每个决策代表选择一个字符放入子集,决策树的叶子节点代表最终的结果,与顺序无关。
function subsets(str, list) {
if (list.length === str.length) {
return [list.map((v, i) => v ? str[i] : '').join('')]
}
let r = []
r = r.concat(subsets(str, list.concat(true)))
r = r.concat(subsets(str, list.concat(false)))
return r
}
console.log(subsets('abc', []))
function* subsets(S) {
for (let i = 0; i < 1 << S.length; i++) {
let s = []
for (let k = 0; k < S.length; k++) {
const take = i & (1 << k)
take && s.push(S[k])
}
yield s.join('')
}
}
const S = ['a', 'b', 'c']
console.log([...subsets(S)])

浙公网安备 33010602011771号