一尘不染

查找格式正确的括号的所有组合

algorithm

这是在与朋友交谈时出现的,我想在这里问一下,因为这是一个有趣的问题,希望看到其他人的解决方案。

任务是编写一个函数Brackets(int n),该函数打印从1 … n开始的所有 格式正确的 括号组合。对于Brackets(3),输出为

()
(())  ()()   
((()))  (()())  (())()  ()(())  ()()()

阅读 250

收藏
2020-07-28

共1个答案

一尘不染

对此产生了裂缝。.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);
    }
}

递归利用了这样一个事实:您不能添加超过所需对数的开括号,并且您也不能添加超过括号的结束括号。

2020-07-28