美文网首页
lintcode-不同的二叉查找树

lintcode-不同的二叉查找树

作者: 鬼谷神奇 | 来源:发表于2016-06-20 23:35 被阅读201次
    • 卡特兰数

      Catalan数是组合数学中一个常出现在各种计数问题中出现的数列。由以比利时的数学家欧仁·查理·卡塔兰 (1814–1894)命名。
        原理:
        令h(0)=1,h(1)=1,catalan数满足递归式:
        h(n)= h(0)h(n-1) + h(1)h(n-2) + + h(n-1)h(0) (其中n>=2)
        该递推关系的解为:
        h(n)=C(2n,n)/(n + 1) (n=1,2,3,)
      另类递归式: h(n)=((4n-2)/(n+1))h(n-1);

    unsigned long long fact(int n, int k) {
            if(k > 0) {
                if(n == 0 && n == 1) {
                    return 1;
                } else {
                    return n * fact(n-1, k-1);
                }
            } else {
                return 1;
            }
            
        }
        
        int numTrees(int n) {
            // write your code here
            return (int)(fact(2*n, n) / fact(n, n) / (n+1));
        }
    
    • 动态规划
    class Solution {
    public:
        /**
         * @paramn n: An integer
         * @return: An integer
         */
         
        
        int numTrees(int n) {
            
            vector<int> dp(n+1, 0);
            dp[0] = dp[1] = 1;
            
            for(int i = 2; i <= n; ++i) {
                for(int j = 0; j <= i-1; ++j) {
                    dp[i] += dp[j]*dp[i-1-j];
                }
            }
            
            return dp[n];
            
        }
    };
    

    相关文章

      网友评论

          本文标题:lintcode-不同的二叉查找树

          本文链接:https://www.haomeiwen.com/subject/rzawdttx.html