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

标签 c# algorithm f# catalan

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

任务是编写一个函数 Brackets(int n) 打印从 1...n 开始的所有 well-formed 括号的组合。对于 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);
    }
}

递归利用了这样一个事实,即您永远不会添加比所需对数更多的左括号,并且您永远不会添加比左括号更多的右括号..

关于c# - 查找格式正确的括号的所有组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52253967/

相关文章:

c# - 如何在 C# 中从控制台读取很长的输入?

c# - C# 中的 Java SHA1 等效项

c# - C# 字符串中的 SQL 语法错误

c++ - 对两个 QVector 进行排序

haskell - F#有多路if吗?

c# - 将键与 Windows 窗体上的按钮相关联

c - 在 C 中使用二分法的两个根之间的区别?

arrays - 阈值下最大绝对子数组和算法

dependency-injection - 使用 f# 时如何不为 Api Controller 中的每个新方法触摸我的 DI 容器

c# - AleaGPU C# 中的高阶函数