【问题标题】:how to make a permutation method accepts a single positive integer?如何使排列方法接受单个正整数?
【发布时间】:2018-05-19 10:24:13
【问题描述】:

这是我的代码:

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 

【问题讨论】:

  • 它不返回任何内容,因为您没有 return 语句。
  • “方法不返回任何内容”是什么意思?您的方法声明为返回类型 void,因此它无法返回任何内容。您的意思是该方法不 print 任何东西吗?另外,您到底希望方法“返回”什么?
  • 向我们展示一些示例输入和输出
  • 我不想要这个方法的返回类型”没有说明任何事情,因为方法必须一些 i> 返回类型(即使是void)。所以你的问题仍然需要一些澄清。例如,您希望您的方法做什么(预期结果是什么,输入什么,以及您得到什么?)。
  • 那些不是排列,更像是替换组合。另外,输出不应该是11, 13, 31, 33吗?

标签: java recursion permutation


【解决方案1】:

你想要这样的东西:

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

【讨论】:

  • 虽然我同意这是解决问题的更好方法,但没有任何解释我怀疑这会对 OP 有多大帮助...
【解决方案2】:

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

【讨论】:

  • 我有什么办法可以在方法中使用变量而不是参数?
  • @MaxLander 不是真的,因为该变量必须被转移到下一次递归调用。您可以在将方法包装到特殊排列类时使用静态变量或类成员,但这会使它变得更加复杂。或者让方法返回排列,那么你也不需要参数,就像在另一个答案中一样。但正如我所说,您可以只提供第二种方法,而无需附加参数作为入口点。
猜你喜欢
  • 2020-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多