leetcode 算法练习

回溯算法

回溯算法的本质就是 穷举,只能通过 剪枝 来优化。

回溯法解决的问题可以抽象成 树形结构

因为回溯法解决的都是 在集合中递归查找子集集合的大小 就构成了 树的宽度递归的深度 就构成了 树的深度

解决的问题:

  1. 组合问题:N个数里面按一定规则找出k个数的集合
  2. 切割问题:一个字符串按一定规则有几种切割方式
  3. 子集问题:一个N个数的集合里有多少符合条件的子集
  4. 排列问题:N个数按一定规则全排列,有几种排列方式
  5. 棋盘问题:N皇后,解数独等

组合不强调 元素顺序 的;排列强调 元素顺序。

贪心算法

贪心的本质是选择每一阶段的 局部最优,从而达到 全局最优

动态规划

适合解决 有很多重叠子问题。

动态规划中 每一个状态 一定是由 上一个状态 推导出来的,这一点区别于贪心。