字符串的排列和组合实现(面试题 28)
2014-07-01 09:27
399 查看
1.字符串的排列(递归实现)
2.字符串的组合(位运算实现,非常简单)
递归解决组合问题
#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;
}
#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;
}
相关文章推荐
- 剑指offer--面试题28:字符串的排列--Java实现
- 《剑指Offer》读书笔记---面试题28:字符串的排列,(扩展:求字符串的所有组合)
- 剑指offer面试题28:字符串的排列 Java实现
- 剑指Offer:面试题28——字符串的排列(java实现)(待序)
- 剑指Offer面试题28字符串的排列组合(递归和栈)
- 海涛老师的面试题-作业28-字符串的排列组合问题。
- 分解让复杂问题简单化-面试题28-字符串的排列与组合
- 剑指Offer28字符串的排列(递归和非递归实现)扩展有重复元素的排列,字符串的组合种类
- 剑指offer--面试题28:字符串的排列--Java实现
- 【剑指offer】面试题28:字符串的排列
- 面试题28:字符串的排列
- 程序员面试题精选100题(28)-字符串的排列
- 字符串全排列与全组合的递归实现-Java版
- 剑指offer 面试题28—字符串的排列
- 面试题28:字符串的排列
- 面试28字符串的排列组合
- 剑指Offer面试题28(java版):字符串的排列
- 程序员面试题精选100题(28)-字符串的排列[算法]
- 【剑指Offer学习】【面试题28 :字符串的排列】
- 字符串排列和组合的JAVA实现 [No. 44]