无重复字符串的排列组合。编写一种方法,计算某字符串的所有排列组合,字符串每个字符均不相同。
示例1:
输入:S = "qwe" 输出:["qwe", "qew", "wqe", "weq", "ewq", "eqw"]
示例2:
输入:S = "ab" 输出:["ab", "ba"]
解题
此题就是全排列的类型
方法一:回溯
class Solution { public: string path; vector<string> res; void backtracing(string& S,vector<bool>& used){ if(path.size()==S.size()){ res.push_back(path); return; } for(int i=0;i<S.size();i++){ if(used[i]==true) continue; used[i]=true; path.push_back(S[i]); backtracing(S,used); path.pop_back(); used[i]=false; } } vector<string> permutation(string S) { vector<bool> used(S.size(),false); backtracing(S,used); return res; } };
换种写法
class Solution { public: vector<string> permutation(string S) { string path; vector<string> res; vector<bool> used(S.size(),false); function<void()> backtracing=[&]{ if(path.size()==S.size()){ res.push_back(path); return; } for(int i=0;i<S.size();i++){ if(used[i]==true) continue; used[i]=true; path.push_back(S[i]); backtracing(); path.pop_back(); used[i]=false; } }; backtracing(); return res; } };