使用的递归的方法:既然是组合,则顺序不要求顺序了。

主要原理就是从第一个字符开始,分两种情况: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语言求字母的全部组合相关推荐

  1. C语言字母的组合,C语言求字母的全部组合

    使用的递归的方法:既然是组合,则顺序不要求顺序了. 主要原理就是从第一个字符开始,分两种情况:1.留下此字符:2.去除此字符. 再对剩下的字符求组合. 然后再第二个字符,分两种情况,再对剩下的字符求组 ...

  2. 求 26个字母任意3个字母的所有组合

    /** h5java.........cn* 求 26个字母任意3个字母的所有组合*/ public class Print{private static int num = 3; //需要组合的字母 ...

  3. C语言求输入字符的字母和数字个数

    C语言求输入字符的字母和数字个数 问题描述:输入一行字符,统计其中的字母个数,数字个数,空格个数. 算法分析:利用while循环遍历玩整个字符串,依次判断字符的类型 #include<stdio ...

  4. Bailian2688 求字母的个数【输入流】

    求字母的个数 总时间限制: 1000ms 内存限制: 65536kB 描述 在一个字符串中找出元音字母a,e,i,o,u出现的次数. 输入 输入一行字符串(字符串中可能有空格,请用gets(s)方法把 ...

  5. 1-3 5-7的c语言程序,C语言求1-1/3+1/5-1/7+...——小程序,大道理

    问题:用C语言编写程序求1-1/3+1/5-1/7+... 示例: #include void main(){ int n=; float sum=,a=; while(a<=){ sum=su ...

  6. Python语言程序设计第七章 - 组合数据类型 - 6.1

    目录 Python语言程序设计第七章 - 组合数据类型 集合运算 集合的关系 集合综合练习 元组元素抓7 元组解包 升序降序 截取部分元素 判断元素书否在列表中存在 头尾对调 翻转列表 指定元素对调 ...

  7. 用C语言求排列组合数

    用C语言求排列组合数 #include <stdio.h> #include <stdlib.h>double f(int a, int b);//因为排列数可大可小,所以返回 ...

  8. 图片验证码——在gVerify.js 的基础之上完善了一下,实现汉字,字母和数字组合的验证码

    在gVerify.js 的基础之上完善了一下,实现汉字,字母和数字组合的验证码,效果图如下: <!DOCTYPE html> <html><head><met ...

  9. 字母使用频率统计c 语言编程,C语言统计字母使用频率

    与<C语言统计字母使用频率>相关的范文 实验一 一.实验名称:替代密码和置换密码的实现 二.实验目的:通过编程实现替代密码算法和置换密码算法,加深对古典密码体系的了解,为以后深入学习密码学 ...

最新文章

  1. linux vim编辑器主要作用,Linux-vim编辑器
  2. android IPC 进程间通讯
  3. 转: linux 命令行设置网络
  4. 反应堆Reactor
  5. 自动驾驶安全驾驶规则_自动驾驶知识科普 自动驾驶汽车的七大核心技术
  6. 使用data()方法缓存数据
  7. oracle死锁优化,Oracle性能优化之LockContention(转)
  8. 总结在开发中常用的Linux命令
  9. 专科计算机专业大学,计算机专业大学排名 专科生学计算机专业好吗
  10. git 日常用法记录
  11. Java实现简单的计算器(原创)
  12. 刘海I关于iPhone X 的适配
  13. 「Algospot」量化QUANTIZE
  14. 2021-09-06单纯形计算方法(
  15. i2c-tools安装与使用总结
  16. word中如何替换一些特殊符号
  17. PDF格式转JPG格式怎么转?掌握方法其实很简单
  18. 最全离散数学 集合运算基本法则(包括差集公式)
  19. C语言 判断一个数是否为2的若干次幂
  20. leetcode剑指Offer2

热门文章

  1. 关于计算机500字英语作文,500字英语作文
  2. SuperMap webgl 中使用的gltf模型制作方法
  3. 樱花泪计算机音乐,樱花泪(纯音乐)
  4. python批量添加姓名生成奖状批量处理图片教师学生奖状
  5. oracle 倒库详细步骤,科二倒车入库操作步骤高清图解,一步一解读,非常实用!...
  6. matplotlib常用绘图风格
  7. OpenCV+OCR文字识别
  8. C/C++中.bss段的解释
  9. 一个比较全的vim命令
  10. esxtop 指标%RDY,NUMA,Wide-VMs