###96. Unique Binary Search Trees



题目:
<https://leetcode.com/problems/unique-binary-search-trees/>


难度:
Medium

思路：


参照此处hint:

<https://shenjie1993.gitbooks.io/leetcode-python/content/096%20Unique%20Binary%20Search%20Trees.html>


首先明确n个不等的数它们能构成的二叉搜索树的种类都是相等的.

毫无头绪，对于1...n的bst，可以这样看，k可以作为root，那么1..k-1必定在左边，k+1...n必定在右边，而1...k-1课产生的bst树是dp[k-1],右边产生的数是dp[n-k],所以能生成的树的数量是 dp[k-1]* dp[n-k]

dp[n] = sum(dp[k-1]*dp[n-k])，从0到k


```
class Solution(object):
    def numTrees(self, n):
        """
        :type n: int
        :rtype: int
        """
        dp = [ 1 for i in range(n+1)]

        for i in range(2,n+1):
        	s = 0
        	for k in range(i):
        		s += dp[k]*dp[i-k-1]
        	dp[i] = s 

        return dp[-1]
```