题目描述:
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
输入描述:
输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。
解题代码:
class Solution {
public:
vector<string> Permutation(string str) {
vector<string> ans;
if(str.empty())
return ans;
PermutationStr(ans,0,str);
sort(ans.begin(),ans.end());
auto it = unique(ans.begin(),ans.end());
ans.erase(it,ans.end());
return ans;
}
void PermutationStr(vector<string> &ans,int begin,string str)
{
if(begin == str.length()-1)
ans.push_back(str);
else
{
for(int start = begin;start<str.length();start++)
{
swap(str[start],str[begin]);
PermutationStr(ans,begin+1,str);
swap(str[start],str[begin]);
}
}
}
};
1.解题思路:在以上代码中未实现剔除重复元素的思路,我是暴力剔除的。
auto it = unique(ans.begin(),ans.end());
ans.erase(it,ans.end());