题目来源
本题来源为:
题目描述
给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。
算法原理
1.状态表示
经验+题目要求
对于本题而言就是:
dp[i]表示:节点个数为i的时候,一共有多少钟二叉树
2.状态转移方程
根据规律发现重复子问题:
因此状态方程为:
dp[i]+=dp[i-j]*dp[j-1];
3.初始化
4.填表顺序
从左往右
5.返回值
dp[n]
代码实现
动态规划的代码基本就是固定的四步:
1.创建dp表 2.初始化 3.填表 4.返回值
本题完整代码实现:
class Solution { public: int numTrees(int n) { vector<int> dp(n+1); dp[0]=1; for(int i=1;i<=n;i++) { for(int j=1;j<=i;j++) { dp[i]+=dp[i-j]*dp[j-1]; } } return dp[n]; } };