C语言求字母的全部组合
来源:互联网 发布:json.parsearray 用法 编辑:程序博客网 时间:2024/05/21 11:10
使用的递归的方法:既然是组合,则顺序不要求顺序了。
主要原理就是从第一个字符开始,分两种情况:1.留下此字符;2.去除此字符。 再对剩下的字符求组合。
然后再第二个字符,分两种情况,再对剩下的字符求组合
转载请注明出处:http://blog.csdn.net/fdl19881/article/details/7983268
#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语言求字母的全部组合
- C语言实现:输入字符串的全部组合
- C语言的全部总结
- 用C语言求组合数
- 用C语言求组合数
- 求数组中和为某一值的全部组合
- 求100——200间的全部素数!C语言编程!
- 求a-z26个字母的三三组合
- C语言编程:字母大小写转换以及求字符串长度的两种方法
- 获取全部的国家&语言字符串组合全集
- C语言求组合数C(n,m)
- 组合的C语言实现
- 组合的C语言实现
- 电话号码的字母组合
- 电话号码的字母组合
- 电话号码的字母组合
- 电话号码的字母组合
- 电话号码的字母组合
- 编程序输出各种星号图
- Chapter 10.顺序容器array[c++11]
- 如何将阿拉伯数字转化为中文
- fedora 16 安装第一天
- 深入理解C++虚函数机制
- C语言求字母的全部组合
- poj 1191 棋盘分割 记忆化搜索
- Vim学习及配置(综合整理)
- Unix 网络编程系列01
- vim使用中遇到的问题
- HDU 4339
- Android开发中的点点滴滴
- 将目录制作成ISO
- 用adsl 配置外网能访问的服务