没有得到正确的预期输出

时间:2014-11-12 08:31:09

标签: algorithm recursion

给定一个数字d和一个数字n。 我必须打印长度为n的所有组合,使得第一个元素为d,其他所有元素为d=4 n=3 距离前一个距离1个。

E.g。输入4 3 2 4 3 4 4 5 4 4 5 6

输出

4 3 2 4 3 2 4 3 4 4 3 4 4 5 4 4 5 4 4 5 6 4 5 6

我编写了以下代码,但它显示的每一行如下 -

private static void printNumbers(int d, int n, String comb) { if(n == 0) { System.out.println(comb); return; } printNumbers(d-1, n-1, comb+d+"\t"); printNumbers(d+1, n-1, comb+d+"\t"); }

代码 -

 printNumbers(4,3,"");

和方法调用看起来像 -

Set

我尝试调试,但由于没有重复输出而未能提出测试条件。 我知道我们可以使用{{1}}或类似的DS来避免重复,但我想知道是否有解决方案而不使用额外的空间。

1 个答案:

答案 0 :(得分:1)

您的问题是n == 1,您致电:

printNumbers(d-1, 0, comb+d+"\t");
printNumbers(d+1, 0, comb+d+"\t");

将打印两次字符串。

您可以通过更改停止标准轻松解决此问题:

private static void printNumbers(int d, int n, String comb) {
    if(n == 1) {
    //      ^ change here
        System.out.println(comb + d);
        //                      ^ change here
        return;
    }

    printNumbers(d-1, n-1, comb+d+"\t");
    printNumbers(d+1, n-1, comb+d+"\t");
}