87得票11回答
有 'N' 个节点,可能有多少不同的二叉树和二叉搜索树?

对于二叉树:不需要考虑树节点的值,我只关注拥有 'N' 个节点的不同树形结构。 对于二叉搜索树:我们必须考虑树节点的值。

35得票30回答
寻找所有合法括号组合

我和一位朋友交流时遇到了这个问题,觉得很有趣想看看其他人的解决方案。 任务是编写一个函数Brackets(int n),打印出1...n中所有格式正确的括号组合。对于Brackets(3),输出将是:() (()) ()() ((())) (()()) (())() ()(()...

17得票2回答
找到第n个Catalan数对m取模的最快算法是什么?(已知)

问题是找到模 m = (10^14 + 7) 的第 n个卡特兰数,其中m不是质数。这里是我尝试的方法列表:(最大N = 10,000) 使用动态规划进行表查找,速度太慢 使用卡特兰公式ncr(2 * n,n)/(n + 1),由于ncr函数而不够快,不能使用指数平方加速,因为m不是质数。 ...

14得票2回答
Python计算卡特兰数

我有一段用二项式系数法计算卡特兰数的代码。def BinominalCoefficient(n,k): res = 1; if (k > n - k): k = n - k for i in range(k): res *= (n ...

11得票8回答
困惑:N个人坐在圆桌周围。不交叉握手的方式数量。

我们有n个人坐在圆桌旁边。任意两个人可以握手。这n个人如何进行握手,以使得没有两次握手相交? 我在技术面试论坛中发现了这个谜题,但是没有答案。我能想到的一种方法是找到所有握手的排列,然后检查每个排列是否满足要求。 请问有没有更有效率的解决方案? @编辑:从评论中澄清:N必须是偶数。

10得票3回答
给定一个已排序的整数数组,可以从中形成多少个二叉搜索树?

假设我有一个数组 [3,18,15,25,26],那么可以从中形成多少个二叉搜索树?

10得票1回答
括号组合的时间复杂度

我尝试解决一个经典问题,即实现一个算法来打印n对括号的所有有效组合。 我找到了这个程序(它完美地工作): public static void addParen(ArrayList<String> list, int leftRem, int rightRem, char[] ...

9得票9回答
如何打印表达式的所有可能平衡括号?

例如,对于元素a,b,c,d,有5种可能的方法将相邻的元素合并成一个元素,每次必须同时合并两个元素(以下用括号表示): (((ab)c)d), ((a(bc))d), ((ab)(cd)), (a((bc)d)) and (a(b(cd))) 第一个例子先将a*b相乘,然后将该积乘以c,...

9得票2回答
寻找具有特定属性的第k个二进制数的算法

假设我们考虑长度为2n的二进制数,其中n可能约为1000。我们正在寻找具有以下特性的第k个数字(k受到10^9的限制): 1的数量等于0的数量,可以描述为:#(1) = #(0) 这个数字的每个前缀都必须包含至少与1一样多的0。在否定这个句子后可能更容易理解:没有前缀会包含比0更多的1。 ...

8得票3回答
使用单个栈生成排列

请问有人能够解释一下使用单个栈且只允许push和pop操作时,如何生成可能的排列算法?我已经搜索了很多,但没有明确的答案。此外,这样排列的总数由卡特兰数给出。但我无法证明这一点。如果可能的话,请详细解释。 谢谢!