这是我的代码:
public static void permutation(int n) {
String x="";
if(n==1) {
System.out.println(x+"1");
System.out.println(x+"3");
}else {
String temp=x;
System.out.print(temp+"1");permutation(n-1);
System.out.print(temp+"3");permutation(n-1);
}
}
我试着将这个问题包围好几个小时。该方法应该只接受一个int(> = 1);然后仅使用" 1"显示所有排列。和" 3"但保持与论点相同的长度。它为我提供了正确的排列数,但大多数值都是错误的。我不想从这种方法中返回任何东西。该方法应该打印排列结果。
例如:如果我给这个方法一个" 2"的整数,它应该显示:
11
13
31
33
相反,我得到的是
11
3
31
3
答案 0 :(得分:0)
你想要这样的东西:
public static List<String> permutation(int n) {
if(n==0) {
return Arrays.asList("");
}
return permutation(n-1).stream()
.flatMap(p -> Stream.of(p + "1", p + "3"))
.collect(Collectors.toList());
}
答案 1 :(得分:0)
您的方法不起作用。通过立即将前缀打印到“置换”(实际上,它更像是替换的组合),前缀仅打印一次,用于应该具有该前缀的所有“置换”。因此,您获得11 3 31 3
而不是11 13 31 33
。相反,您可以将前缀作为另一个参数传递给方法:
public static void permutation(int n, String prefix) {
if (n <= 0) {
System.out.println(prefix);
} else {
permutation(n-1, prefix + "1");
permutation(n-1, prefix + "3");
}
}
如果您不想更改方法的签名,可以创建具有单个int
参数的第二个方法,将第二个方法称为permutation(n, "")
。
public static void permutation(int n) {
permutation(n, "");
}