【算法】【回溯】力扣-面试题08.07.无重复字符串的排列组合详解【超详细的算法解释和注释】

在这里插入图片描述

说在前面

今天博主给大家带来的是力扣上的一道回溯算法的OJ,完成这道题后,博主觉得这道题是一道经典的排列问题,用回溯暴力搜索是可以解题的!

tips:封面图片来自互联网

这里博主还提供题目,数据结构和算法专栏,都是干货满满的专栏哦,供大家食用~


博主给大家的话

在这里插入图片描述
那么这里博主先安利一下一些干货满满的专栏啦!

数据结构专栏:手撕数据结构 这里包含了博主很多的数据结构学习上的总结,每一篇都是超级用心编写的,有兴趣的伙伴们都支持一下吧!
算法专栏:算法 这里可以说是博主的刷题历程,里面总结了一些经典的力扣上的题目,和算法实现的总结,对考试和竞赛都是很有帮助的!
力扣刷题专栏:跟着博主刷Leetcode 想要冲击ACM、蓝桥杯或者大学生程序设计竞赛的伙伴,这里面都是博主的刷题记录,希望对你们有帮助!
C的深度解剖专栏:C语言的深度解剖 想要深度学习C语言里面所蕴含的各种智慧,各种功能的底层实现的初学者们,相信这个专栏对你们会有帮助的!

题目描述

在这里插入图片描述

算法思路和代码实现

回溯暴力搜索即可,有关于回溯算法解题的模板和思路,博主给大家提供传送门!

class Solution {
private:
    vector<string>ret;//结果数组
    string path;//路径数组
    void dfs(string s,vector<bool>used){
        if(path.size()==s.size()){//递归终止条件
            ret.push_back(path);
            return;
        }
        for(int i=0;i<s.size();i++){
            if(used[i]==true)continue;
            path+=s[i];
            used[i]=true;
            dfs(s,used);
            used[i]=false;
            path.pop_back();
        }
    }
public:
    vector<string> permutation(string S) {
    //使用used数组去重,即遍历的时候,跳过刚才选过的字符
        vector<bool>used(S.size()+1,false);
        dfs(S,used);
        return ret;
    }
};

尾声

看到这里,相信你已经学会这道题了,如果你感觉这篇博客对你有帮助的话,不要忘了一键三连哦!

posted @ 2022-06-12 23:54  背包Yu  阅读(2)  评论(0编辑  收藏  举报  来源