#include<iostream>
#include<string>
#include<vector>
#include <algorithm>
using namespace std;
//全排列
void Permutation(vector<string> &array,string str,int begin)
{
if (begin == str.size() - 1)
{
array.push_back(str);
}
for (int i = begin; i < str.size(); i++)
{
swap(str[i], str[begin]);
Permutation(array,str, begin + 1);
swap(str[i], str[begin]); //为了防止重复的情况,还需要将begin处的元素重新换回来
}
}
vector<string> Permutation(string str)
{
vector<string> a;
if (str.empty())
{
return a;
}
Permutation(a, str, 0);
return a;
}
//全组合
void Combination(char* str, int n, vector<char> &result)
{
if (str == NULL || (n != 0 && *str == '\0'))
{
return;
}
if (n == 0)
{
static int num = 1;
cout << num++ << endl;
vector<char>::iterator it = result.begin();
for (; it != result.end(); ++it)
{
cout << *it;
}
cout << endl;
return;
}
result.push_back(*str);
Combination(str + 1, n - 1, result);//包含这个字符
result.pop_back();
Combination(str + 1, n , result);//不包含,直接略过 n:挑选的元素个数
}
void Combination(char* str)
{
vector<char> result;
int len = strlen(str);
for (int i = 1; i <= len; ++i)
{
Combination(str, i, result);
}
}
int main()
{
string str = "abc";
vector<string> b;
b = Permutation(str);
for (int i = 0; i < b.size(); i++)
{
cout << b[i] << endl;
}
char tr[] = "abc";
Combination(tr);
getchar();
return 0;
}