Algorithm 查找有效的括号对don';不行?
我在做一个没有看答案的编码问题,我在努力寻找我的思维过程中的错误 问题是找到有效的n对括号的所有组合 当我运行这个程序时,它似乎打印出了所有的组合,而不是带有有效括号的组合。我在想Algorithm 查找有效的括号对don';不行?,algorithm,recursion,Algorithm,Recursion,我在做一个没有看答案的编码问题,我在努力寻找我的思维过程中的错误 问题是找到有效的n对括号的所有组合 当我运行这个程序时,它似乎打印出了所有的组合,而不是带有有效括号的组合。我在想打印组合(前缀+”(“,open+1,close,n);将确保首先打印开头括号,然后递归调用打印组合(前缀+”),open,close+1,n)我看到一个输出带有类似)(()的内容。如果先添加(),这怎么可能呢 这是因为在堆栈上完成对打印组合(prefix+”(“,open+1,close,n)的递归调用后,您的代
打印组合(前缀+”(“,open+1,close,n);
将确保首先打印开头括号,然后递归调用打印组合(前缀+”),open,close+1,n)代码>我看到一个输出带有类似)((
)的内容。如果先添加(
),这怎么可能呢
这是因为在堆栈上完成对打印组合(prefix+”(“,open+1,close,n)
的递归调用后,您的代码开始重复打印组合(prefix+”),open,close+1,n)
。这就是为什么您会得到一个以开头的字符串输出。)
,这不是因为您进行这两个递归调用的顺序。要修复此问题,您需要有一个条件,即close
始终小于open
。如下所示
public class Foo{
public void printCombinations(String prefix, int open, int close, int n){
if (open > n) {
return;
}
if (close > n) {
return;
}
if (open == n && close == n){
System.out.println(prefix);
return;
}
printCombinations(prefix + "(", open + 1, close, n);
if (close < open) {
printCombinations(prefix + ")", open, close + 1, n);
}
}
public static void main(String []args){
Foo w = new Foo();
w.printCombinations("", 0, 0, 3);
}
}
公共类Foo{
公共void打印组合(字符串前缀、int-open、int-close、int-n){
如果(打开>n){
返回;
}
如果(关闭>n){
返回;
}
如果(打开==n&&close==n){
System.out.println(前缀);
返回;
}
打印组合(前缀+“(”,打开+1,关闭,n);
如果(关闭<打开){
打印组合(前缀+“”),打开,关闭+1,n;
}
}
公共静态void main(字符串[]args){
Foo w=新的Foo();
w、 打印组合(“、0、0、3);
}
}
对不起,我意识到它看起来不好,所以我把它修好了:p
public class Foo{
public void printCombinations(String prefix, int open, int close, int n){
if (open > n) {
return;
}
if (close > n) {
return;
}
if (open == n && close == n){
System.out.println(prefix);
return;
}
printCombinations(prefix + "(", open + 1, close, n);
if (close < open) {
printCombinations(prefix + ")", open, close + 1, n);
}
}
public static void main(String []args){
Foo w = new Foo();
w.printCombinations("", 0, 0, 3);
}
}