题目:
输入一个字符串,打印出该字符串中字符的所有排列。
思路:
DFS。
代码:
#include<iostream>
#include <vector>
#include <string>
using namespace std;
//功能:求字符串全排列
void dfs(string str ,vector<string> &result , int len , int start)
{
if(start == len)
result.push_back(str);
for(int i = start ; i < len ; i++)
{
swap(str[i] , str[start]);
dfs(str , result , len , start + 1);
swap(str[i] , str[start]);
}
}
vector<string> Permutation(string str)
{
vector<string> result;
if(str.empty())
return result;
int len = str.size();
dfs(str , result , len , 0);
return result;
}
void DFSHHT(char *str , int len)
{
if(len == strlen(str))
//cout<<str<<" ";
printf("%s " , str);
for(int i = len ; i < strlen(str) ; i++)
{
swap(str[i] , str[len]);
DFSHHT(str , len + 1);
swap(str[i] , str[len]);
}
}
void PermutationHHT(char *str)
{
if(str == NULL)
return ;
DFSHHT(str , 0);
}
int main()
{
string str = "abcd";
vector<string> result = Permutation(str);
for(int i = 0 ; i < result.size() ; i++)
cout<<result[i]<<' ';
cout<<endl;
char str2[] = "abcd";
PermutationHHT(str2);
cout<<endl;
return 0;
}