回溯算法

Posted yomi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了回溯算法相关的知识,希望对你有一定的参考价值。

leetcode:131 分割回文串

问题

说实话,状态学了回溯,感觉已经懂了但是,今天这是搞笑

代码

直接上代码
先上图,理解这个startIndex

class Solution 
private:
    vector<vector<string>> result;
    vector<string> str; 
    bool isPalindrome(const string& str1, int start, int end)
       while (start < end) 
            if (str1[start] != str1[end]) 
                return false;
            
            start++;
            end--;
        
        return 1;

    
    void backtracking(string& s, int startIndex)
        if (startIndex >= s.size()) 
            result.push_back(str);
            return;
        
        for (int i = startIndex; i < s.size(); i++) 
            if (isPalindrome(s,startIndex, i))  // 个人觉得最难的是这个startIndex ,针对不好控制
                str.push_back(s.substr(startIndex, i - startIndex  + 1 ));
             else continue;
            backtracking(s,i + 1);
            str.pop_back();
        
    
public:
    vector<vector<string>> partition(string s) 
        backtracking(s,0);
        return result;
    
;

以上是关于回溯算法的主要内容,如果未能解决你的问题,请参考以下文章

核心算法5回溯算法

回溯算法 ------回溯算法的几个例子

五大基本算法——回溯法

回溯算法 ------回溯算法的设计思想和适用条件

回溯算法 ------ 回溯算法的设计思想及适用条件

回溯算法-全排列问题