字符串的排列(set&递归)

字符串的排列

http://www.nowcoder.com/questionTerminal/fe6b651b66ae47d7acce78ffdd9a96c7

/*
递归:f(s,pos),从pos开始到字符串末尾进行种类获取
每层递归确定一个字符,注意递归结束要返回原位置,防止重复,错误
用set集合存储自动把重复的删除且排序。
return {}
vector<string>(ret.begin(), ret.end())
insert();
*/
class Solution {
public:
    void perm(int pos, string s, set<string> &ret){
        if(pos + 1 == s.length()){//遍历到最后一个结束
            ret.insert(s);
            return;
        }

        for(int i = pos; i < s.length(); ++i){
            swap(s[pos], s[i]);//分别用不同的字母开头输入
            perm(pos + 1, s, ret);//对后面字符串进行操作
            swap(s[pos], s[i]);//回溯 回复原来字符串为了保证以不同字母开头
        }
    }
    vector<string> Permutation(string s) {
        if (s.empty()) return {};
        set<string> ret;//递归中不考虑重复,set集合自动删除
        perm(0, s, ret);
        return vector<string>(ret.begin(), ret.end());
    }
};
全部评论

相关推荐

请看图片
投递叮咚买菜等公司10个岗位 >
点赞 评论 收藏
分享
沉淀一会:**圣经 1.同学你面试评价不错,概率很大,请耐心等待;2.你的排名比较靠前,不要担心,耐心等待;3.问题不大,正在审批,不要着急签其他公司,等等我们!4.预计9月中下旬,安心过节;5.下周会有结果,请耐心等待下;6.可能国庆节前后,一有结果我马上通知你;7.预计10月中旬,再坚持一下;8.正在走流程,就这两天了;9.同学,结果我也不知道,你如果查到了也告诉我一声;10.同学你出线不明朗,建议签其他公司保底!11.同学你找了哪些公司,我也在找工作。
点赞 评论 收藏
分享
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务