C++算法学习(回溯算法)

1、目标

在搜索尝试过程中寻找问题的解

2、方法

当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择。

3、具体思路

从一条路往前走,能进则进,不能进则退回来,换一条路再试。

4、例题

(1)力扣:10. 正则表达式匹配

(这个题可以直接用正则,但是毫无意义,主要是练习回溯算法)

class Solution {
    
    
public:
    bool isMatch(string s, string p) {
    
    
    if(p.length()==0) return s.length()==0;
    //判断第一位
    bool point_answer = (s.length() != 0) 
                        &&((s[0] == p[0]) || (p[0] == '.'));
    //判断第二位
    if(p[1] == '*' 
       && p.length() >= 2) 
     //这是找的规律
    return ((point_answer && isMatch(s.substr(1),p)) 
           ||isMatch(s,p.substr(2)));
    else return point_answer 
                && isMatch(s.substr(1),p.substr(1));
    }
};

下次刷到题继续更,回溯嘛,用递归一直返回去写。

猜你喜欢

转载自blog.csdn.net/weixin_45743162/article/details/110739144