字符串的排列和组合实现(面试题 28)

来源:互联网 发布:外贸鞋 淘宝 编辑:程序博客网 时间:2024/04/29 23:07

1.字符串的排列(递归实现)

#include "iostream"#include "string"using namespace std;static  int count =0;void swap(char& a,char& b){char c;c =a;a =b;b =c;}void permulate(char* array,int first,int last){char temp[20];if (first ==last){count++;cout<<count<<":"<<array<<endl;return;}for (int i=first;i<=last;i++){swap(array[first],array[i]);strcpy(temp,array);permulate(temp,first+1,last);}}void main(){char array[] ={"abcde"};int len =strlen(array);permulate(array,0,len-1);}

2.字符串的组合(位运算实现,非常简单)

//输入一个字符串,输出所有字符的组合#include "iostream"using namespace std;void combination(char* array,int num,int len){for (int i=len-1;i>=0;i--){if (num&(1<<i)){cout<<array[len -i-1];}}cout<<endl;}void main(){char input[30];cout<<"输入字符串:";cin>>input;int len =strlen(input);for (int i=1;i<(1<<len);i++){combination(input,i,len);}}


递归解决组合问题

#include <iostream>  #include <list>  using namespace std;  list<int> list1;  void find_factor(int sum,int n)  {      //递归出口      if(n<=0||sum<=0)          return;      //输出找到的数      if(sum==n)      {          list1.reverse();          for(list<int>::iterator iter=list1.begin();iter!=list1.end();iter++)              cout<<*iter<<"+";          cout<<n<<endl;          list1.reverse();      }      list1.push_front(n);      find_factor(sum-n,n-1);//n放在里面      list1.pop_front();      find_factor(sum,n-1);//n不放在里面  }    int main(void)  {      int sum,n;      cin>>sum>>n;      cout<<"所有可能的序列,如下:"<<endl;      find_factor(sum,n);      return 0;  } 



0 0
原创粉丝点击