2020-04-02 刷题1(字符串)

2020-04-06  本文已影响0人  nowherespyfly

字符串的全排列

用set去重。
全排列用dfs来做,将当前字符串分为两部分,第一部分是第一个字符,其子问题为将第一个字符后面的所有字符(包括第一个字符)与当前字符交换,这样就确定了第一个字符,然后再递归的对第二个字符进行确定。

class Solution {
public:
    set<string> all_permute;
    void get_permute(string s, int idx){
        if(idx == s.size() - 1) {
            all_permute.insert(s);
            return;
        }
        for(int i = idx; i < s.size(); i++){
            string tmp = s;
            swap(tmp[idx], tmp[i]);
            get_permute(tmp, idx+1);
        }
    }
    vector<string> permutation(string s) {
        get_permute(s, 0);
        vector<string> ret_permute;
        set<string>::iterator iter = all_permute.begin();
        for(; iter != all_permute.end(); iter++)
            ret_permute.push_back(*iter);
        return ret_permute;
    }
};
上一篇下一篇

猜你喜欢

热点阅读