字符串的排列和组合实现(面试题 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
- 字符串的排列和组合实现(面试题 28)
- LinkedIn 面试题:字符串的全排列(Permutation)和组合(Combination)
- 剑指offer--面试题28:字符串的排列--Java实现
- 剑指offer--面试题28:字符串的排列--Java实现
- 剑指offer面试题28:字符串的排列 Java实现
- 字符串排列和组合的JAVA实现
- 分解让复杂问题简单化-面试题28-字符串的排列与组合
- 面试题28:字符串的排列
- 面试题28:字符串的排列
- 面试题28 字符串的全排列
- 面试题28:字符串的排列
- 面试题28:字符串的排列
- 面试题28:字符串的排列
- 面试题28:字符串的排列
- 面试题28:字符串的排列
- 面试题28字符串的排列
- 面试题28:字符串的排列
- 面试题28:字符串的排列
- 删除外键关系,而不删除外键列
- git提交代码时提示:RPC failed
- Mysql 存储过程
- IOS7 二维码扫描
- linux文件权限详解
- 字符串的排列和组合实现(面试题 28)
- Bundle类
- Error: missing newline in
- 自动分析工具:数据科学家职业的终结者
- C/C++语言void及void指针深层探索
- crm2011插件介绍
- Oracle 11g透明网关连接Sqlserver 2000
- Android 实现发邮件,使用JavaMail方式实现
- cygwin 下分区文件名大小写