image.png
image.png
image.png
image.png
image.png
image.png
image.png

image.png
image.png
image.png
image.png
image.png
image.png

枚举子集-求abc中所有子集

image.png
image.png
image.png

全排列问题

image.png
image.png
image.png
image.png
image.png

组合问题

image.png
image.png
image.png
image.png
image.png
image.png

  1. // s:数组 ,需要求组合的集合
  2. // k:取出元素的个数
  3. function combination (S, k) {
  4. if (k === 0 || S.length === k) {
  5. return [S.slice(0, k)]
  6. }
  7. const [first, ...others] = S
  8. let r = []
  9. r = r.concat(combination(others, k- 1).map(c=>[first, ...c]))
  10. r = r.concat(combination(others, k ))
  11. return r
  12. }
  13. const S = ['A','B','C','D' ]
  14. console.log(combination(S,2));

递归的空间优化

就是看能不能把递归转化成for循环,这样就可以避免循环调用引发的内存不足的问题

回溯算法

image.png

image.png
image.png
image.png

重复子问题优化

image.png
image.png
image.png

爬楼梯

image.png
image.png
image.png
image.png
image.png

尾递归

image.png
image.png
image.png
image.png
image.png
image.png