题目内容
https://leetcode-cn.com/problems/unique-binary-search-trees/
Given n, how many structurally unique BST's (binary search trees) that store values 1 ... n?
Example:
Input: 3
Output: 5
Explanation:
Given n = 3, there are a total of 5 unique BST's:
1 3 3 2 1
\ / / / \ \
3 2 1 1 3 2
/ / \ \
2 1 2 3
给定一个整数 n,求以 1 ... n 为节点组成的二叉搜索树有多少种?
题目思路
这道题可以使用归纳法归纳出规律,然后进行计算。需要字典记录n=1~n时候对应的每个结果。具体公式看代码。才用了类似于动态规划的算法。
程序代码
class Solution(object):
def numTrees(self, n):
"""
:type n: int
:rtype: int
"""
if not n:
return 0
acm={1:1,2:2,3:5}
if n in acm:
return acm[n]
for i in range(4,n+1):
temp=0
for j in range(i//2,i-1):
temp+=acm[j]*acm[i-1-j]#(i-1-j)+(j)=i-1也就是两个下标的和应该为i-1
temp+=acm[i-1]#最后加上下标为i-1
if i%2==0:#偶数
acm[i]=2*temp
else:#奇数
acm[i]=2*temp-acm[i//2]**2#如果是奇数需要把中间项减去一个。
return acm[n]