字符串的所有可能组合输出
2013-06-28 10:45
183 查看
分递归法实现和比特位法实现
运行结果:
// 字符的所有组合.cpp : 定义控制台应用程序的入口点。 //程序猴6.28 #include "stdafx.h" #include <vector> using namespace std; void Comb(char* pStr,int num,vector<char> &result); void Combination(char* pStr) { if (!pStr) return; vector<char> result; int i,length = strlen(pStr); for (i=1;i<=length;i++) Comb(pStr,i,result); } void Comb(char* pStr,int num,vector<char> &result) { if (!pStr) return; if (num == 0) { static int sf = 1; printf("第%d个组合\n",sf++); vector<char>::iterator iBegin = result.begin(); for (;iBegin!=result.end();iBegin++) { printf("%c",*iBegin); } printf("\n"); return; } if (*pStr=='\0') return; result.push_back(*pStr);//本字符若被纳入结果中,则下一步从下一个字符开始获取num-1个字符 Comb(pStr+1,num-1,result); result.pop_back(); //本字符若未被纳入结果中,则下一步从下一个字符开始获取num个字符 Comb(pStr+1,num,result); } void Comb_Bit(char* pStr,int Bit,int length) { if (!pStr) return; vector<char> result; int j; int FF=0; for(j=0;j<length;j++) { if ((1<<j)&Bit) { result.push_back(*(pStr+FF)); } FF++; } vector<char>::iterator Iter=result.begin(); static int sf = 1; printf("第%d个组合\n",sf++); for (;Iter!=result.end();Iter++) { printf("%c",*Iter); } printf("\n"); } int _tmain(int argc, _TCHAR* argv[]) { char A[] = "123"; printf("递归法实现:\n"); Combination(A); printf("\n"); printf("比特位法实现:\n"); int length = strlen(A); for (int i=1;i<(1<<length);i++) { //从第1位~第1<<length-1位中所有的比特位为0或1,为1的位置入结果,为0的位不置入结果 Comb_Bit(A,i,length); } return 0; }
运行结果:
相关文章推荐
- 递归问题之一:给定一字符串,输出字符串中所有字符子串的各种组合形式,长度为一个字符到字符串的长度,忽略排序
- 输入一个字符串,输出该字符串中字符的所有组合
- 如果一个正整数可以由连续正整数求和而来,输出所有可能的组合
- 给定一个数字字符串,返回数字可能表示的所有可能的字母组合。数字与字母的对应关系和手机按键对应
- 给定一个数组,n个数,打印所有可能的r位数的组合。例如{1,2,3,4}n=4,r=2.输出{1,2}{1,3}{1,4}{2,3}{2,4}{3,4}
- 题目:输入一个字符串,输出该字符串中字符的所有组合。举个例子,如果输入abc,它的组合有a、b、c、ab、ac、bc、abc。
- 给定一个字符串,输出其所有的可能排列
- 给定一个数字字符串,返回数字可能表示的所有可能的字母组合。数字与字母的对应关系和手机按键对应。
- 输出给定数组中所有和为S的可能组合
- 编写一个算法输出n个布尔量的所有可能的组合
- 输出字符串的所有全排列(递归法和非递归,非递归采用组合数学的字典序)
- 【编程题】输入一个字符串,输出该字符串中相邻字符的所有组合。
- C语言输入一个字符串,输出字符串的所有组合
- 输入一个字符串,输出该字符串中字符的所有组合
- 输入一个字符串,输出该字符串中字符的所有组合 C#【总结】
- 输入一个字符串,输出该字符串中字符的所有组合
- Java练习题-输入一个字符串,输出该字符串中字符的所有组合(二)
- 翻转01字符串中的?,并列出所有的可能输出
- 字符串之输出所有字母组合相同的单词
- 输出字符串的所有组合的java实现