class Solution { public: vector<string> res; void dfs(string str, int x) { // str是排列的string,x是排列到的string的下标 if(x == str.size() - 1) { // 遍历到最后一个数, 证明当前的string已经排列好 res.push_back(str); return; } set<int> st; // char 可以转变为int set存储已经排列好的字符 for(int i = x; i < str.size(); i++) { if(st.find(str[i]) != st.end()) // 剪枝操作,如果要排列的字符已经经过了排列,则不进行后续操作,进行剪枝 continue; st.insert(str[i]); swap(str[x], str[i]); dfs(str, x + 1); swap(str[x], str[i]); } } vector<string> Permutation(string str) { dfs(str, 0); return res; } };