leetcode 93. 复原IP地址 python 我最不会的回溯来了!

回溯题目我一直不太会。个人理解回溯是一种解题思路,可以通过递归来实现。但有的字符串的题目,比如131. 分割回文串,可以主观通过理解成新加入一个字符或者新加入一段字符来解释,我就可以通过递归写出来,但像leetcode 93. 复原IP地址我就有些摸不着思路。
————————————————————————————
————————————————————————————
最近又刷了全排列,以及77题,好像有了一点点思路了。
我之前会做的题是可以用数学归纳法,找到f(n)和f(n-1)关系的题目。但有的题不知道怎么归纳,就只能用dfs暴力求解了。
回溯的话我目前的理解是这样,有两个参数是必要的,一个是当前开始的位置,一个是之前整理好的结果
回溯法最大的优点在于,它可以不用管第n个数进去插入的规律,他只是试探下一位所有的可能性,然后满足就输出。
所以,回溯法一般的出口是**长度满足条件,或者已经匹配到最后一位。**接下来跟一个for循环,该for循环是当前这一位所有的可能,然后循环中遍历下一位。
但有些不能重复取的题,记得标记现场和恢复现场!!
目前还没有形成完整的做题思路,如果找到感觉了会更新一个专题!
————————————————————————————
————————————————————————————
最后参考网络上的一篇博客,一边看一边写的结果是这样:
在这里插入图片描述
这个回溯其实就是探索可能满足的条件,如果一定不满足就返回上一级,还是很好理解的。但过一天我复现的时候,主体部分是这么写的:
在这里插入图片描述在这里插入图片描述
主观看起来并没有任何不对,但执行结果是这样:
在这里插入图片描述
看起来并没有回溯!
我一直以为是判断条件出了问题,就一直更改判断条件。改完发现还是不对,后来又怀疑是不应该return re.顺路说一下,之前的结果不用return 应该是在同一类里面变量是可以用的,但删掉return re结果还是没有改善。到底哪里出了问题呢?
只能一步步更改,我发现改到这一步结果对了!
在这里插入图片描述
刚开始并不能理解,只能debug一步步看。发现唯一的区别就是,不满足条件时就会回到上一级,每次回溯都会先执行这两句赋值,然后把当前的这两个值改了再返回上一级调用。比如,把finished和left根据当前的值改了,就回不到上一级了!!!就是,**在返回上一级之前,这两个参数已经改变了,所以其实没有回溯的效果。**所以结果会出错!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值