zoukankan      html  css  js  c++  java
  • [LeetCode] 96. Unique Binary Search Trees 独一无二的二叉搜索树

    思路

    • 标签:动态规划
    • 假设n个节点存在二叉排序树的个数是G(n),令f(i)为以i为根的二叉搜索树的个数,则   G(n)=f(1)+f(2)+f(3)+f(4)+...+f(n)
    • 当i为根节点时,其左子树节点个数为i-1个,右子树节点为n-i,则   f(i)=G(i1)G(ni)
    • 综合两个公式可以得到 卡特兰数 公式:    G(n)=G(0)G(n1)+G(1)(n2)+...+G(n1)G(0)   正好可以作为dp的状态转移方程。

    代码:

    class Solution {
    public:
        int numTrees(int n)
        {
            std::vector<int> dp(n+1,0);
            dp[0] = 1;
            dp[1] = 1;
            for(int i = 2;i<=n;++i)
                for(int j = 0;j<i;++j)
                {
                    dp[i] += dp[j]*dp[i-1-j];
                }
            return dp[n];
        }
    };
  • 相关阅读:
    英文词频统计
    字符串练习
    第八周
    第七周
    第五周
    第六周
    第三周
    第四周
    第二周
    第一周作业
  • 原文地址:https://www.cnblogs.com/wangxf2019/p/13058073.html
Copyright © 2011-2022 走看看