字符串全排列递归实现(避免重复),这段代码谁能说下思路,看不懂哇
#include<stdio.h>
#include<string.h>
#define N 10
char s[N], t[N];
void convert(char *strSource, char *strTarget, int nLen)
{
int i, j;
char strConvert[10];
if(nLen == 1)
{
strTarget[0] = strSource[0];
printf("%s\n", t);
return;
}
else
{
for(i=0; i<nLen; i++)
{
for(j=0; j<i && strSource[i] != strSource[j]; j++);
if(j == i)
{
strTarget[0] = strSource[i];
memcpy(strConvert, strSource, i);
memcpy(strConvert+i, strSource+i+1, nLen-i-1);
convert(strConvert, strTarget+1, nLen-1);
}
}
}
}
void main()
{
int n;
scanf("%s",s);
memset(t, 0, N);
printf("全排列是:\n");
convert(s, t, strlen(s));
}

如果不管重复的话会输出4!=24个,上面这段代码避免了重复输出,所以输出了12个。请问这段代码是怎么避免重复输出的?
相关推荐
python3实现字符串的全排列的方法(无重复字符)
主要介绍了python3实现字符串的全排列的方法(无重复字符),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
非递归全排列:字典序法详解与性能实测
全排列作为组合数学中的基础问题,在密码字典生成、排课算法和旅行商问题验证等场景广泛应用。递归回溯方案虽然逻辑直观,但在大规模数据下面临函数调用次数激增、栈空间占用过高及输出非字典序等工程瓶颈。字典序法通过逐步寻找“下一个排列”的方式,以O(1)额外空间生成严格递增序列,天然支持去重与实时中断,显著提升算法性能与可维护性。本文从原理推导到代码实现,系统剖析非递归全排列的核心步骤,并结合性能实测数据对比递归方案,为开发者在算法选型与优化中提供实践参考。
带油重复字符串全排列递归解法
常见得全排列有三种解决方案,for循环穷举,stl摸板函数next_permutation,还有DFS深度优先搜索,当我们遇到带有重复的字符串时应该考虑除去重复的部分。
Java_字符串全排列大全_(已解决重复问题)
Java写的源码,解决各种字符串全排列问题,已解决重复问题,经过上机调试可直接运行
使用C语言解决字符串全排列问题
问题 输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则输出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba 思路 这是典型的递归求解问题,递归算法有四个特性: 必须有可达到的终止条件,否则程序陷入死循环 子问题在规模上比原问题小 子问题可通过再次递归调用求解 子问题的解应能组合成整个问题的解 对于字符串的排列问题: 如果能生成n-1个元素的全排列,就能生成n个元素的全排列。对于只有一个元素的集合,可以直接生成全排列。所以全排列的递归终止条件很明确,只有一个元素时。我们可以分析一下全排


