不同的二叉搜索树
给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数
方法:动态规划,这道题很简单,注意细节,dp数组必须是n+1长度,第二个for循环中是range(1,i+1)不是range(0,i+1)
class Solution(object):
def numTrees(self, n):
"""
:type n: int
:rtype: int
"""
dp = [0] * (n + 1)
dp[0] = 1
dp[1] = 1
for i in range(2, n + 1):#这个循环用来确定是以那个数作为搜索树的第一个根节点
for j in range(1, i + 1):#这个循环用来将数划分2半
dp[i] += dp[j - 1] * dp[i - j]
return dp[n]