zoukankan      html  css  js  c++  java
  • LeetCode 每日一题 96. 不同的二叉搜索树

    题目描述

    给定一个整数 n,求以 1 ... n 为节点组成的二叉搜索树有多少种?

    示例:

    输入: 3
    输出: 5
    解释:
    给定 n = 3, 一共有 5 种不同结构的二叉搜索树:
    
       1         3     3      2      1
               /     /      /       
         3     2     1      1   3      2
        /     /                        
       2     1         2                 3
    
    

    Solution

    设答案为 (G(n)) ,显然有 (G(n) = Sigma _{i=1} ^n G(i-1)*G(n-i)) , (G(0)=G(1)=1) .

    引入卡特兰数Catalan number,其定义式 (Catalan_n=Sigma_{1} ^{n-1} Catalan_i * Catalan_{n-i})

    令生成函数 (g(x) = h_1 x + h_2 x^2 + h_3 x^3 + ... + h_n x^n) (h_i 即 Catalan_i)

    [[g(x)]^2 = h_1^2x^2 + (h_1 h_2 + h_2 h_1)x^3 + (h_1 h_3 + h_2 h_2 + h_3 h1) x^4 + ... + (h_1 h_{n-1} + h_2 h_{n-2} + ... +h_{n-1} h_1)x^n + ... ]

    代入 (h_1 = h_2 = 1) ,(卡特兰数定义式有 (h_n = Sigma_{1}^{n-1}h_i * h_{n-i})

    [egin{align*} [g(x)]^2 &= h_2^2x^2 +h_3 x^3 + h_4 x^4 + ... + h_n x^n + ... \ &= g(x) - h_1 x \ &= g(x) - x \ end{align*} ]

    于是有 ([g(x)]^2 - g(x) + x = 0) , (g_1(x) = frac{1 pm sqrt{1-4x}}{2})

    (g(0) = 0), 所以 (g(x) = frac{1 - sqrt{1-4x}}{2} = frac{1}{2}- frac{1}{2} (1-4x)^{frac{1}{2}})

    牛顿二项式展开 (g(x))

    [(1+z)^frac12 = 1 + Sigma_{n=1} ^infty frac{(-1)^{n-1}}{n imes 2^{2n-1}} egin{pmatrix} 2n-2 \ n-1 end{pmatrix} qquad ]

    得通项

    [h_n = frac1n egin{pmatrix} 2n-2 \ n-1 end{pmatrix} qquad ]

    参考链接:

    class Solution {
     public:
      int numTrees(int n) {
        // wiki:C(2n,n)/n+1 = 2n! / ( n! (n+1)! )
        // how to get this ? C_{i+1} = 2*(2*i+1)/(i+2) C_{i}
        unsigned long long ans = 1;
        for(int i = 0; i < n; ++i)
          ans = 2 * (2 * i + 1) * ans / (i + 2);
        return ans;
      }
    };
    
  • 相关阅读:
    轻松背后的N+疲惫——系统日志
    Wcf实现IServiceBehavior拓展机制
    一个迭代小算法,根据指定的个数对下标进行分组
    SqlServer 游标用法
    DataView RowFilter
    Asp.net Repeater 排序
    asp.net 导出Excel
    C# 导出Excel(csv )
    C# 上传图片
    C# 调用外部.exe文件
  • 原文地址:https://www.cnblogs.com/Forgenvueory/p/13303976.html
Copyright © 2011-2022 走看看