如何使置换方法接受一个正整数?

时间:2018-05-19 10:24:13

标签: java recursion permutation

这是我的代码:

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 

2 个答案:

答案 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, "");
}