前端算法之穷举
决策树的每个决策代表选择一个字符放入子集,决策树的叶子节点代表最终的结果,与顺序无关。
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号