小程序搭建是什么意思seo网站优化方法
96. 不同的二叉搜索树
给你一个整数
n
,求恰由n
个节点组成且节点值从1
到n
互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。示例 1:
输入:n = 3 输出:5示例 2:
输入:n = 1 输出:1提示:
1 <= n <= 19
class Solution(object):def numTrees(self, n):""":type n: int:rtype: int1.明确dp数组含义: dp[i]表示i对应的dp[i]二叉树的数目2.确实递推公式:dp[i] += dp[j - 1] * dp[i - j]; j-1 为j为头结点左子树节点数量,i-j 为以j为头结点右子树节点数量3.初始化dp数组: dp[0] = 1, dp[1] = 1, 4.确定遍历顺序: 从小到大遍历,大的值是小的值累加推出来的5.打印dp数组: debugtime: O(n^2)space: O(n) 用于存储动态规划数组 dp"""# 初始化dp数组dp = [0] * (n+1) # 考虑n = 0的特殊情况,所以n+1而不是n#base casedp[0] = 1dp[1] = 1for i in range(2, n+1): # 遍历从1到n的每个数字for j in range(1,i+1): # 对于每个数字i,计算以i为根节点的二叉搜索树的数量# 利用动态规划的思想,累加左子树和右子树的组合数量dp[i] += dp[j - 1] * dp[i - j] return dp[n]