含有重复字符的全排列问题以及按字典序打印

博客介绍了如何使用递归的Perm算法解决含有重复字符的字符串全排列问题,并详细解释了如何在算法中处理重复字符避免重复排列,以及如何确保排列结果按照字典序输出。提供了算法核心代码和完整问题解决方案。
摘要由CSDN通过智能技术生成

关于字符的全排列问题也是有很多算法的,今天我就来介绍递归的Perm算法。直接看题吧。。。

给定一字符串,可能含有相同元素。请借助递归设计算法求出该字符串的所有不同的排序。

输入格式:

给定一串字符串(长度小于等于9,且至少有3个字符相同)。

输出格式:

每行输出一个字符串。按照字典序递增的顺序输出,每个排列占一行。

最后一行输出不同排列的个数。

题目大体意思就是要我们求一个字符串的全排列,说到递归,那么Perm算法出来了,Perm算法核心思想是把m个待排元素每一个依次拿到首位,剩下的m-1个组成新的待排元素传入Perm进行相同的操作……….以此类推,直到元素递归到只有一个了,就依次打印出来 形成一个排列

先上算法的核心部分:

void Perm(char b[],int low,int high,int& n)//这里把待排序元素放入char型数组b中,待排元素起始下
                                      //标为low,末尾下标为high,n用来计有多少种不同的排列组合                                                            
{

    if(low == high)              //如果递归排到只有最后一个元素,就按序打印出来
    {
        for(int i = 0;i < low;i++)
        {
            printf("%c",b[i]);

        }
            n++;                  //打印一次计数值加1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值