题目描述
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
输入描述:
输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。
思路:http://blog.csdn.net/wangdd_199326/article/details/60149133
直接很逗比。。。居然写出如下的代码。。。。心好累。。。。
class Solution {
public:
vector<string> Permutation(string str) {
sort(str.begin(),str.end());
do {
return str;
}while(next_permutation(str.begin(),str.end()));
}
};
改写了一下,成功。
class Solution {
public:
vector<string> Permutation(string str) {
vector<string> a;
if(str.size()==0) return a;
sort(str.begin(),str.end());
do {
a.push_back(str);
}while(next_permutation(str.begin(),str.end()));
return a;
}
};
class Solution {
public:
vector<string> Permutation(string str) {
if(str!="") dfs(str,0);
return ret;
}
private:
vector<string> ret;
void dfs(string str,int s) {
if(s==str.size()) {
ret.push_back(str);
return ;
}
for(int i=s;i<str.size();i++) {
if(i!=s &&str[s]==str[i]) continue;
swap(str[s],str[i]);
dfs(str,s+1);
}
}
};
class Solution {
public:
set<string> res;
void fun(string str, int pos)
{
if (pos == str.length())
{
res.insert(str);
return;
}
for (int i = pos; i < str.length(); ++i)
{
swap(str[i], str[pos]);
fun(str, pos + 1);
swap(str[i], str[pos]);
}
}
vector<string> Permutation(string str) {
res.clear();
vector<string> st;
if (str.length() == 0)return st;
fun(str, 0);
set<string>::iterator it;
for (it = res.begin(); it != res.end(); ++it)
st.push_back(*it);
return st;
}
}
拥抱明天!
不给自己做枷锁去限制自己。
别让时代的悲哀,成为你人生的悲哀。

浙公网安备 33010602011771号