字符的所有组合
2014-06-20 11:43
106 查看
/*
求字符的所有组合
输入三个字符a,b,c,则它们的组合有a、b、c、ab、ac、bc、abc。当交换字符串中的两个字符时,虽然能得到两个不同的排列,但却是同一个组合。比如ab和ba是不同排列,但只算一个组合。我们可以把求n个字符串组成长度为m的组合的问题分解为两个子问题:
1。选择长度为n的字符串中的第一个字符,然后在剩下的n-1个字符中选择m-1个字符;
2。不选择长度为n的字符串中的第一个字符,然后在剩下的n-1个字符中选择m个字符。
*/
#include <iostream>
using namespace std;
void Combine( char *p, int m, int begin, char *p1 ,int begin1 )
{
if( m<=0 )
cout << p1 << endl; // 参数判断的顺序很重要!对传进来的每一个参数,务必检查!不要存在投机心理!!
else if( begin > (int)strlen(p)-1 );
else{
p1[begin1]= p[begin];//用于暂存组合字符的p1的开始值也必须要专门设立一个变量begin1动态记录
Combine( p, m-1, begin+1, p1, begin1+1 );
Combine( p, m, begin+1, p1, begin1 );
}
}
void Combine( char *p )
{
if( p==NULL ) return ;
for( int i=1; i<=(int)strlen(p); i++ )//输入n个字符,则这n个字符能构成长度为1,2,3 ,……,n的组合
{
char *p1=new char[i+1];//多预留一位放'\0',对字符串,千万记住最后一位加'\0'!!!
if(p1==NULL) return;
p1[i]='\0';
//在放数据前,提前在最后一位加'\0'把这个字符串空间包围起来
Combine( p, i, 0, p1, 0 );
delete [] p1;
}
}
int main( void )
{
char p[]="abc";
Combine( p );
return 0;
}
求字符的所有组合
输入三个字符a,b,c,则它们的组合有a、b、c、ab、ac、bc、abc。当交换字符串中的两个字符时,虽然能得到两个不同的排列,但却是同一个组合。比如ab和ba是不同排列,但只算一个组合。我们可以把求n个字符串组成长度为m的组合的问题分解为两个子问题:
1。选择长度为n的字符串中的第一个字符,然后在剩下的n-1个字符中选择m-1个字符;
2。不选择长度为n的字符串中的第一个字符,然后在剩下的n-1个字符中选择m个字符。
*/
#include <iostream>
using namespace std;
void Combine( char *p, int m, int begin, char *p1 ,int begin1 )
{
if( m<=0 )
cout << p1 << endl; // 参数判断的顺序很重要!对传进来的每一个参数,务必检查!不要存在投机心理!!
else if( begin > (int)strlen(p)-1 );
else{
p1[begin1]= p[begin];//用于暂存组合字符的p1的开始值也必须要专门设立一个变量begin1动态记录
Combine( p, m-1, begin+1, p1, begin1+1 );
Combine( p, m, begin+1, p1, begin1 );
}
}
void Combine( char *p )
{
if( p==NULL ) return ;
for( int i=1; i<=(int)strlen(p); i++ )//输入n个字符,则这n个字符能构成长度为1,2,3 ,……,n的组合
{
char *p1=new char[i+1];//多预留一位放'\0',对字符串,千万记住最后一位加'\0'!!!
if(p1==NULL) return;
p1[i]='\0';
//在放数据前,提前在最后一位加'\0'把这个字符串空间包围起来
Combine( p, i, 0, p1, 0 );
delete [] p1;
}
}
int main( void )
{
char p[]="abc";
Combine( p );
return 0;
}
相关文章推荐
- 打印一个字符串中字符的所有组合
- 找出一个字符数组(元素不重复)所有可能字符的组合
- 字符串中字符的所有组合(组合中的先后顺序不考虑)
- 显示字符串中所有字符的排列组合。
- 用JAVA编写一个算法实现对一个字符数组的所有元素的所有组合
- 打印n个字符的所有组合
- 输出该字符串中字符的所有组合
- 从文件读取字符串,并求出该字符串包含的字符集中所有字符的全部组合
- LeetCodet题解--17. Letter Combinations of a Phone Number(所有数字键盘组合所对应的所有字符集合)
- LeetCode--438. Find All Anagrams in a String(找到所有字符组合)Python
- 字符串中字符的所有组合(递归方式)
- 剑指offer:求字符的所有组合
- 显示字符串中所有字符的排列组合。
- 输入一个字符串,输出该字符串中字符的所有组合 C#【总结】
- 从M个不同字符中任取N个字符的所有组合
- 面试题28—相关题目(字符所有的组合)
- 字符所有组合
- 如何输出字符窜的所有组合
- 【算法题】字符的所有组合
- 组合问题(从M个不同字符中任取N个字符的所有组合)