回溯算法
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));
}
};
下次刷到题继续更,回溯嘛,用递归一直返回去写。