递归的方式解决,只需要每次判断当前节点是否已经被占用就好
class Solution {
public:
void findlist(string s,vector<string>&cc,string tem,int begin,vector<bool>&flag)
{
if(tem.size()==s.size())cc.push_back(tem);
if(begin>s.size())return;
for(int i=0;i<s.size();i++)
{
if(!flag[i])
{
flag[i]=true;
findlist(s,cc,tem+s[i],begin+1,flag);
flag[i]=false;
}
}
}
vector<string> permutation(string S)
{
vector<string>cc;
vector<bool>flag(S.size(),false);
findlist(S,cc,"",0,flag);
return cc;
}
};
使用库函数next_permutation要快很多。。/
class Solution {
public:
vector permutation(string S)
{
sort(S.begin(),S.end());
vectorcc;
cc.push_back(S);
while(next_permutation(S.begin(),S.end()))
{
cc.push_back(S);
}
return cc;
}
};