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; }