高频刷题-回溯法(backtracking)专题

首先,什么是backTracking?

这是backtracking和brute force的区别:

Backtracking can be seen as an optimized way to brute force. Brute force approaches evaluate every possibility. In backtracking you stop evaluating a possibility as soon it breaks some constraint provided in the problem, take a step back and keep trying other possible cases, see if those lead to a valid solution.

翻译过来就是:backtracking可以被看作是一个优化的蛮力。蛮力方法的做法是暴力遍历每一种的可能性。但是backtracking中如果遇到不满足约束条件的时候,就停止这一次的遍历,然后退一步,继续尝试其他可能的情况下的解。

哪些问题适合采用backtracking方法求解?

  1. 显式的要求返回所有答案的集合(Permutations or subsets)。   
  2. 你关心的是实际的解的集合,而不是求解最优值(例如最大值,最小值等)。(如果是后者最有可能适合采用DP方法)。

下面是一个backtracking求解的通用模板:

实际上backtracking就是DFS方法,上图的undo choices 可以理解为往上跳一级。

下面我们来求解46和47,Permutations

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值