给定一个数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");
}