字符串的全排列

来源:互联网 发布:地球大炮 知乎 编辑:程序博客网 时间:2024/05/16 13:44
//按照字典序进行排列,用位实现#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;}


原创粉丝点击