字符串排列、组合(C语言实现)

这里主要介绍字符串排列组合问题,高中数学常见的题目,不用详细介绍,看例子就可以解决问题

"1212"  

全排列结果为 1212,1221,1122,2112,2121,2211

组合结果是   1,2,12

我所理解的排列组合结果是  1,2,12,21

解决方案:主要是利用递归思想

排列问题:求n个字符排列问题简化求n-1个字符排列问题,逐层递归到1个字符。有n个字符的序列第一个字符与后面每一个前面没有重复的字符交换,避免了重复序列,然后求n-1个字符全排列   f(char *s, int index,int len)index为第一个下标,len是s总长度

组合问题:先按照递增排序,然后挑出无重复的元素存于另一个字符串,依次从字符串挑选1..n个字符,递归选择字符串  combine(char *s, char *re,int len, int num)  

全排列代码:

?
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#define swap(a,b,c) (c)=(a),(a)=(b),(b)=(c)
 
void  permutation( char  s[], int  b, int  len) // 长度为len的字符串,从s[i]开始全排列
{
      char   c;
      if (b==len) //等价于 if(s[b]=='\0')
          printf ( "%s\n" ,s);
      if (b<len)
      for ( int  i=b; i<len; i++)
      {
             int  f=0;
  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值