题解 | #字符串的排列#

字符串的排列

https://www.nowcoder.com/practice/fe6b651b66ae47d7acce78ffdd9a96c7

采用图例中的递归方法。

#include <any>
#include <set>
#include <vector>
class Solution {
  public:
    vector<string> Permutation(string str) {
        vector<string> res, tmpres;
        if (str.length() <= 1) {
            res.push_back(str);
            return res;
        }
        string tmp, cha;
        set<char> rec; // 设置一个集合,用于记录出现过的字符
        for (int i = 0; i < str.length(); i++) {
            if (rec.find(str[i]) != rec.end()) { // 若出现过该字符,则不交换
                continue;
            }
            rec.insert(str[i]);
            tmp = str;
            swap(tmp[0], tmp[i]);
            cha = tmp[0];
            tmp = tmp.substr(1, tmp.length() - 1);
            tmpres = Permutation(tmp);
            for (int j = 0; j < tmpres.size(); j++) {
                tmpres[j].insert(0, cha);
            }
            res.insert(res.end(), tmpres.begin(), tmpres.end());
        }
        return res;
    }
};

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务