LeetCode 面试题 08.07. 无重复字符串的排列组合

回溯树的问题,和之前的递归思想相同,但是从来没有做过相关总结;

 

总体来说,通过一个一个递归来进行枚举,每次传入flag标志数组进行记录,进行重复元素剔除,太久没刷有点没感觉;

 

void find(vector<bool>& flag, vector<int>& mem, int x, int count) {
    if (count == x) {
        res.push_back(mem);
        return;
    }
    for (int i = 0; i < x; i++) {
        if (!flag[i]) {
            flag[i] = true;
            mem.push_back(i);
            find(flag, mem, x, count + 1);
            mem.pop_back();
            flag[i] = false;
        }
    }
}

vector<string> permutation(string S) {
    int n = S.size();
    vector<bool>flag(n);
    vector<string>ress;
    for (int i = 0; i < n; i++) {
        flag[i] = false;
    }
    vector<int>mem;
    find(flag, mem, n, 0);
    for (int i = 0; i < res.size(); i++) {
        string s = "";
        for (int j = 0; j < res[i].size(); j++) {
            s += S[res[i][j]];
        }
        ress.push_back(s);
    }
    return ress;
}

 

posted @ 2021-01-31 17:05  暮云林凌  阅读(59)  评论(0编辑  收藏  举报