我无法弄清楚如何识别我在递归调用中生成重复的排列。假设我们用长度为n的字符串重复2个字母。然后我需要创建n!/ 2!序列,而不是n!序列。如何修改我的代码以删除(不生成)重复的排列
如何修改我的代码来实现此目的?
public class GeneralPermutationGenerator{
public static void main(String[] args) {
String s = "AABC";
perm(s);
}
public static void perm(String s){
char cs[] = s.toCharArray();
char result[] = new char[cs.length];
rperm(cs, result, 0);
}
static int j = 1;
private static void rperm(char[] cs, char[] result, int level){
if(level == result.length){
System.out.println(j++ + " " + new String(result));
return;
}
for(int i = 0; i < cs.length; i++){
if(cs[i] != 0){
result[level] = cs[i];
char temp = cs[i];
cs[i] = 0;
rperm(cs, result, ++level);
cs[i] = temp;
level--;
}
}
}
}
我真的不知道它会如何工作。你可以做任何代码更改? 所以我可以运行它并看到 – YohanRoth
@MaharajaX我更新了答案,如果仍有一些不清楚的方面,请告诉我! – qwertyman