如何使排列方法接受单个正整数?



这是我的代码:

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 

你想要这样的东西:

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());
}

你的方法行不通。通过立即将前缀打印到"排列"(实际上,它更像是带有替换的组合(,前缀只打印一次,用于所有应该具有该前缀的"排列"。因此,你会得到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, "");
}

最新更新