void swap_char(char &a, char &b)
{
char t = a;
a = b;
b = t;
}
// 重复字符处理
bool foo(char* str, char p, int begins, int ends)
{
for(int i = begins; i <= ends; ++i)
if (str[i] == p) return true;
return false;
}
// 统计
static int n=0;
// 递归
void permutation_1(char *str, int left, int right)
{
if (left>=right)
{
++n;
printf("%s\n", str);
return;
}
for (int i=left; i < right; ++i)
{
if (left != i && (str[left] == str[i] || foo(str, str[i], left+1, i-1))) continue;
swap_char(str[left], str[i]);
permutation_1(str, left+1, right);
swap_char(str[left], str[i]);
}
}
字符串全排列
最新推荐文章于 2025-04-22 17:26:52 发布