这是在与 friend 交谈时出现的,我想在这里问一下,因为这是一个有趣的问题,希望看到其他人的解决方案。
任务是编写一个函数Brackets(int n),该函数从1 ... n打印格式正确的 括号的所有组合。对于Brackets(3),输出为
()
(()) ()()
((())) (()()) (())() ()(()) ()()()
最佳答案
对此产生了裂缝.. C#也。
public void Brackets(int n) {
for (int i = 1; i <= n; i++) {
Brackets("", 0, 0, i);
}
}
private void Brackets(string output, int open, int close, int pairs) {
if((open==pairs)&&(close==pairs)) {
Console.WriteLine(output);
} else {
if(open<pairs)
Brackets(output + "(", open+1, close, pairs);
if(close<open)
Brackets(output + ")", open, close+1, pairs);
}
}
递归利用了以下事实:您不能添加超过所需对数的开括号,并且您添加的闭括号也绝不能超过开括号。