leetcode:不同的二叉树

cpp 复制代码
class Solution {
public:
    
    int numTrees(int n) 
    {
        vector<int> dp(n+1);
        dp[0] = 1;
        dp[1] = 1;
        for(int i = 2;i <= n;i++)
        {
            for(int j = 1;j <= i;j++) // 当根节点为j时
            {
                dp[i] += dp[j-1] * dp[i-j];
            }
        }
        return dp[n];
    }
};
/*  dp[i] = i个不同的数组成的二叉搜索数的个数
    假设 i = 5
    当根节点等于 1 时 ,其余数字都比1大,只能在右边 dp[i] += dp[4]
    当根节点等于 2 时,左边有一个1比2小,右边有三个比2大的数字 dp[i] += dp[1] * dp[3]
    当根节点等于 3 时,左边有两个数比3小,右边有两个数比3大的数字 dp[i] += dp[2] * dp[2]
    ...
    直到根节点等于5,左边有4个数字比5小,只能放在5的左边,dp[i] += dp[4]
*/
相关推荐
B1acktion6 分钟前
2.7.希尔排序——让插入排序先大步走,再小步收尾
c++·算法·排序算法
原来是猿10 分钟前
Linux进程信号详解(一):信号快速认识
linux·c++·算法
py有趣14 分钟前
力扣热门100题之翻转二叉树
算法·leetcode
醉城夜风~17 分钟前
C++函数参数的默认值及其使用场景
开发语言·c++·算法
tankeven22 分钟前
HJ162 ACM中的AC题
c++·算法
无尽的罚坐人生23 分钟前
hot 100 56. 合并区间
算法
kishu_iOS&AI25 分钟前
机器学习——归一化/标准化(特征工程预处理)
人工智能·算法·机器学习
美式请加冰34 分钟前
递归在二叉树搜索中的使用
算法
生信研究猿35 分钟前
leetcode 21.合并两个有序链表
python·leetcode·链表
nianniannnn1 小时前
力扣 76. 最小覆盖子串
c++·算法·leetcode