C语言求字母的全部组合
2012-09-15 22:31
246 查看
使用的递归的方法:既然是组合,则顺序不要求顺序了。
主要原理就是从第一个字符开始,分两种情况:1.留下此字符;2.去除此字符。 再对剩下的字符求组合。
然后再第二个字符,分两种情况,再对剩下的字符求组合
转载请注明出处:/article/7805609.html
结果:
orignate string : abc
b
c
cb
a
ac
ab
abc
结果中有些字符的顺序改变了,如cb ,,按正常顺序可能是bc,,,
这是因为我的这个程序的空间复杂度为O(1)
如果你要求产生的组合与原始字符的顺序一致,,则可以使用mask代替,,标记使用不使用此字符。此时空间复杂度为O(N)
反正时间复杂度都为O(N)
主要原理就是从第一个字符开始,分两种情况:1.留下此字符;2.去除此字符。 再对剩下的字符求组合。
然后再第二个字符,分两种情况,再对剩下的字符求组合
转载请注明出处:/article/7805609.html
#include <stdlib.h> #include <stdio.h> #include <string.h> template <typename T> inline void swap(T &a , T &b) { T tmp; tmp = a; a = b; b = tmp; } void doPrintAllCombination(char *str , int begin , int end) { if(begin == end) { char tmp; if(end != 0) { //i要此字符时 tmp = str[end]; str[end] = '\0'; printf("%s\n",str); str[end] = tmp; } tmp = str[end+1]; //不要此字符 str[end+1] = '\0'; printf("%s\n" , str); str[end+1] = tmp; return; } //第二种情况,去除此字符 swap(str[begin],str[end]); doPrintAllCombination(str , begin , end-1); swap(str[begin] , str[end]); //第一种情况,留下此字符 doPrintAllCombination(str , begin+1 , end); } void printAllCombination(char *str) { doPrintAllCombination(str , 0 , strlen(str)-1); } int main(int argc , char *argv[]) { if(argc != 2) { printf("usage: %s <string>\n" , argv[0]); return -1; } char *str = (char*)malloc(strlen(argv[1]) + 1); strcpy(str , argv[1]); printf("orignate string : %s\n" , str); printAllCombination(str); free(str); return 0; }
结果:
orignate string : abc
b
c
cb
a
ac
ab
abc
结果中有些字符的顺序改变了,如cb ,,按正常顺序可能是bc,,,
这是因为我的这个程序的空间复杂度为O(1)
如果你要求产生的组合与原始字符的顺序一致,,则可以使用mask代替,,标记使用不使用此字符。此时空间复杂度为O(N)
反正时间复杂度都为O(N)
相关文章推荐
- C语言实现:输入字符串的全部组合
- Random随机生成几位数字和UUID随机生成几位字母加数字组合
- C#中如何获取任意字母组合和验证邮件格式
- 正则表达式限制文本框只能输入数字,小数点,英文字母,汉字及其组合
- 工具类 - 随机生成字母和数字的组合
- IOS UTF8中文字母数字 组合时长度截取
- PHP正则匹配6到16位字符组合(且只能为数字、字母、下划线)
- 22.Generate Parentheses&n对括号的全部有效组合
- 使用正规表达式判断NSString是否全部由数字或者字母组成
- PHP获取汉字的拼音(全部与首字母)(转载)
- 字符串中所有字母的组合
- 【Android】按钮设置字母不全部大写,button set text to lower case; android button settext lowercase programmably
- 求a-z26个字母的三三组合
- 【c语言】调整数组使奇数全部都位于偶数前面
- C语言初学 求100到200的全部素数
- 用C语言如何编程实现从三个数组中各抽取几个数进行组合的问题?
- 【杭电-oj】-1161-字母全部化为小写
- oracle字母和数字,小数点,数字符号组合排序(注意:难度比前一篇oracle字母和数字组合排序加大)
- <编程之美>电话号码对应英文字母组合
- 字符串中的字母全部替换成字母的下一个字母