如果没有要求字典序排序,则直接采用递归的思想,将字符串的排列看成两步,第一步,交换第一个字母和任意一个字母(包括自己,但不包括和自己相等的其他字母)固定第一个字母,固定第一个字母,然后对后面的字符串也采用这样的操作;但是这样并不一定按照字典序排序;
class Solution { public: vector<string> Permutation(string str) { if(str.size()==0) return {}; sort(str.begin(),str.end()); vector<string> res; per(str,0,res); return res; } void per(string &str,int id,vector<string> &res){ if(id>=str.size()){ res.push_back(str); }else{ for(int i=id;i<str.size();i++){ if(i!=id && str[i]==str[id])continue; char tmp=str[id]; str[id]=str[i]; str[i]=tmp; per(str,id+1,res); tmp=str[id]; str[id]=str[i]; str[i]=tmp; } } } };