这是在与 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);
    }
}

递归利用了以下事实:您不能添加超过所需对数的开括号,并且您添加的闭括号也绝不能超过开括号。

10-04 20:29