algorithm - 没有得到正确的预期输出

标签 algorithm recursion

给定一个数字 d 和一个数字 n。 我必须打印所有长度 n 的组合,这样第一个元素是 d 并且所有其他元素都是 与前一个相距 1 个距离。

例如对于输入 d=4 n=3

输出

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 或类似的 DS 来避免重复,但我想知道是否有不使用额外空间的解决方案。

最佳答案

你的问题是,当 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");
}

关于algorithm - 没有得到正确的预期输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26882413/

相关文章:

c++ - 比较它们之间的元素,得到共同值的键

algorithm - 冷启动的推荐方法和算法

python - 在递归函数中收集参数

c - 这个程序显示段错误,我认为发生了无限递归。你能建议我更正吗

c - 递归调用清除链表?

c++ - 按升序递归输出二叉树

algorithm - 杰卡德距离

random - 如果n体问题是混沌的,为什么不将其用作RNG?

php - 计算数组内部的数组? PHP

java - 高效算法(散列、排序)