剑指Offer-字符串的排列(中等)

题目描述

输入一个字符串,打印出该字符串中字符的所有排列。
你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。

输入:s = "abc"
输出:["abc", "acb", "bac", "bca", "cab", "cba"]

就全排列

class Solution {
public:
    int len;
    vector<bool> used;//保存状态
    vector<string> ans;//保存输出结果
    vector<char> temp;//保存每个string中的元素
    vector<string> permutation(string s) {
        len=s.length();
        used.resize(len);
        sort(s.begin(),s.end());//先排序,将重复的放在一起
        dfs(s);
        return ans;
    }
    void dfs(string s){
        if(temp.size()==len) {
            string t;
            for(auto i:temp) t+=i; 
            ans.push_back(t);
            return;
        }
        for(int i=0;i<len;i++){
            if(!used[i]){//没有被占用
                if(i>0&&s[i]==s[i-1]&&used[i-1]==false) continue;//减枝
                temp.push_back(s[i]);
                used[i]=true;
                dfs(s);
                used[i]=false;
                temp.pop_back();
            }
        }
    }
};
全部评论

相关推荐

2024-12-29 11:08
湖南工业大学 Java
程序员牛肉:简历没什么大问题了。 而且不要再换项目了。三月份就开暑期实习了,现在都一月份了。实在来不及重新开一下项目了。把一个项目写完或许很快,但是把一个项目搞懂吃透并不简单。所以不要换项目了,把你简历上面的两个项目好好挖一挖吧。 具体 体现在:你能不能流利的说出你的项目的每一个功能点代码实现?你能不能说出在这块除了A技术之外,还有其他技术能够实现嘛?如果有其他技术能够实现,那你这块为什么选择了你当前用的这个技术?
投递牛客等公司
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务