LeetCode 96 不同的二叉搜索树

在这里插入图片描述

解题思路

二叉搜索树要求左小右大
设G(n)是n个结点组成的二叉搜索树,
G(n) = G(1)+G(2)+……G(n)
设f(i)为以i为结点的树的个数
f(i) = G(i-1)*G(n-i)
联立得卡特兰数公式:G(n)=G(0)∗G(n−1)+G(1)∗G(n−2)+…+G(n−1)∗G(0)

初始化G(0)=G(1)=1

class Solution {
    
    
    public int numTrees(int n) {
    
    
        int []dp = new int[n+1];
        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];
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_43812609/article/details/107361256