用Python找出使用n个不同节点可能生成的BST数

用Python找出使用n个不同节点可能生成的BST数

假设有一个数字n。如果我们有像[1,2,…,n]这样的数字,我们必须计算可以使用这些n个值形成的可能的BST数。如果答案太大,那么将结果模10^9+7。

因此,如果输入是n=3,则输出将是14,

用Python找出使用n个不同节点可能生成的BST数

为了解决这个问题,我们将遵循以下步骤

  • a:一个带有值[0,1]的列表
  • m:10^9+7
  • max_n:1000
  • 对于k在范围2到max_n+1中,做以下步骤
    • 在列表最后插入(1 +所有元素的总和(a[i]*a[k-i]对于所有i在范围内(1,k)))模m
  • 返回(a[n+1]-1)模m

示例

让我们看看以下实现,以更好地理解-

def solve(n):
   a = [0, 1]
   m = 10**9+7
   max_n = 1000

   for k in range(2, max_n + 2):
      a.append((1 + sum(a[i] * a[k - i] for i in range(1, k))) % m)
   return ((a[n + 1] - 1) % m)

n = 3
print(solve(n))

输入

3

输出

14

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程