回溯法小结

回溯法

回溯法在开发和做题的过程中被大量用到,如果没有掌握回溯法将会寸步难行。
回溯法适用于在一个算法中需要分多步进行,而且每一步中都会有相同的或者类似的判断,多数能被画成二叉树来分析。比如说在生成括号的题目中(上一篇博客),每一步都需要判断在这步中添加’(’,还是添加’)’,有什么样的条件添加什么内容,当open小于max时就添加’(’,当close小于open时就添加’)’;
同时,进入回溯法的第一件事就是判断是否符合回溯结束的条件,在这道题中就是字符串的长度达到了规定,就直接return了,如果不符合,就执行回溯法的主体部分;输入回溯法的变量直接和回溯结束的条件挂钩,这样才有可能在下次调用回溯的时候直接返回。
最后,调用完回溯之后,还会有后续的操作,比如在这道题中,回删去当前字符串的最后一个字符,如果没有这一步,调用回溯法只会有一个输出(可能会重复),比如说在这题中,如果max=2;在第一次执行满足cur.length()==max*2后,将字符串“(())”添加到list之后返回上级回溯法,删除最后一个字符’)‘后,返回上级回溯法,删去最后一个字符’)’……直到回到第一级回溯法,这是的cur="(",程序继续往下,再次调用回溯,这是执行的字符串的情况是"()()"。

总的来说,回溯法有3个要素:
1、确定return的条件。
2、改变输入回溯的条件,往第一个的条件靠拢(这个可能是多个条件语句,针对多种情况的处理)。
3、执行完回溯的后续操作(没有后续操作是输出只有一种的情况)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值