Python 回溯算法

最近leetcode刷题遇到了许多和回溯法有关的题,然而对回溯法完全没有过系统的了解明显感觉费力了很多狠心打算一次把回溯法弄懂,开个贴记录一下学习过程

回溯法的基本模板

class solution:
    def solvepermutation(self,*arg,**kwg):
        pass #初始化输入输出内容
    #定义helper函数,构建回溯主体
    def helper(self,array,solution):
        pass

solution().solvepermutation(*arg)

回溯和递归动态规划有点相似
相似点:都是需要调用自身,将完整问题分部解决
不同点:递归是自顶向下 动态规划是自下向上 两者都是单一方向的
而回溯法在不满足条件是,会回溯到上一个满足条件的位置调整参数继续执行

对于回溯算法的使用,首先要确定两个条件:
1.循环终止条件,即满足什么条件时,整个程序终止并输出结果
2.回溯条件,即满足什么条件时,回溯到上一个状态,否则继续进行循环

例题1.

找单词,即在一个字母矩阵中寻找特定的单词
按照常规思考方式,首先两个for循环历遍所有的字母,首先找到单词的首字母
,然后对其规定的方向,寻找剩余字母,直到找到完整的单词。
对于这个问题 首先我们确立上述的两个条件
1.循环终止条件:找到完整单词则循环终止。那如何用代码表示呢。可以将单词存在一个字符串中,每按顺序找到一个字母,则在字符串中删去该字母。当字符串长度为0时,则终止循环
2.回溯条件:即当前位置所有方向都找不到下一个字母时,回溯到上一个位置,换一个方向继续寻找

然后要思考如何将该问题拆分成若干步,很简单,我们每次只寻找一个字母,而不是查找完整的单词。

class Solution():
    def run(self,board,words):
        #两个for循环历遍整个矩阵
        for i in range(len(board)):
            for  j in range(len(board[0])):
                if self
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值