题目:
有重复字符串的排列组合。编写一种方法,计算某字符串的所有排列组合。
示例1:
输入:S = "qqe" 输出:["eqq","qeq","qqe"]
源码:
char **list;
int cnt;
void dp(char *t, int n, char *p)
{
if (*p == 0) {
for (int i = 0; i < cnt; i++)
if (!strcmp(list[i], t))//没想到更好的去重手段
return;
list[cnt] = malloc(10);
strcpy(list[cnt++], t);
return;
}
char *x = t + n;
for (int i = 0; i < n + 1; i++) {
x[1] = x[0];
x[0] = *p;
if (x[0] != x[1])
dp(t, n + 1, p + 1);
x--;
}
memmove(t, t + 1, n + 1);
}
char **permutation(char *S, int *returnSize)
{
list = malloc(8 * 370000);
cnt = 0;
char *p = S + 1;
char t[11] = { S[0] };
dp(t, 1, p);
*returnSize = cnt;
return list;
}