给定一个数字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来避免重复,但我想知道是否有解决方案而不使用额外的空间。
答案 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");
}