//按照字典序进行排列,用位实现
#include<iostream>
#include<string>
using namespace std;
int a[] = { 1, 3, 5, 4, 6 };
char str[] = "abcde";
void print_subset(int n, int s){
for (int i = 0; i < n; ++i){
if (s&(1 << i)) // 判断s的二进制中哪些位为1,即代表取某一位
cout<<str[i]; //或者a[i]
}
cout << endl;
}
void subset(int n){
for (int i = 0; i < (1 << n); ++i){
print_subset(n, i);
}
}
int main(void){
subset(5);
return 0;
}
//只交换,字符串的长度不变,所有组合形式,用递归实现
#include<string>
#include<iostream>
#include<vector>
#include<algorithm>
#include<map>
using namespace std;
void permutation(vector<string>&ans, string &str, int begin){
if (begin == str.size() - 1){
ans.push_back(str);
return;
}
else{
for (int i = begin; i < str.size(); i++){
if (i != begin && str[i] == str[begin])
continue;
swap(str[i], str[begin]);//交换一个
permutation(ans, str, begin + 1);//衍生出后面所有的均保存
swap(str[i], str[begin]);//恢复到原始,后面与下一位置进行交换
}
}
}
int main(void){
string s="abcd";
vector<string> ss;
permutation(ss, s, 0);
for (auto c : ss)
cout << c << endl;
return 0;
}