1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| class Solution { public: vector<string> permutation(string s) { vector<string> ret; vector<bool> path(s.size()); backTrack(s, "", ret, path); return ret; } private: unordered_set<string> set; void backTrack(string& s, string tmp, vector<string>& ret, vector<bool>& path) { if(s.size() == tmp.size()) { if(set.find(tmp) == set.end()) { set.insert(tmp); ret.push_back(tmp); } return; } for(int i = 0; i < s.size(); ++i) { if(path[i]) continue; path[i] = true; backTrack(s, tmp + s[i], ret, path); path[i] = false; } } };
|