leetcode17、77

发布时间 2023-09-26 17:11:18作者: iu本u
  • 回溯算法可以当作是二叉树的结构进行分析,看在叶节点的位置是什么条件收获结果
  • 每个抛进去的结果都是到叶子节点的路径

以leetcode17为例:

每一层遍历的是每一个号码对应的字符串,当号码全部遍历完成就可以返回结果,所以终止条件是(index==string.length());index是层数,string是号码。

每一层的操作是遍历每个号码对应的字符串,所以操作的for循环遍历的是每个号码索引的index的每个字符,将每个字符加入路径path;在最后返回结果时将所有果实path添加进返回结果。

回溯模板

void backtracking(int index,int n,string& digits){
    if(满足终止条件){
        result.push_back(path);
        return ;
    }
    char c=digits[index];
    //操作
    for(int i=0;i<m[c].size();i++){
        path.push_back(m[c][i]);
        backtracking(index+1,n;digits);
        path.pop_back();//回溯
    }
}

string也可以像vector一样做pop_back()和push_back()操作