leetCode #96 Unique Binary Search Trees

题目:找出以1..n为元素值的所有bst的个数

分析:

对于n=1,那么就只有1个

对于n=2,可以以1为root,剩下一个2就放右边;也可以以2为root,剩下的1放左边,一共2个

对于3呢?同样可以尝试分别以1 2 3作为root,其余的作为子树

总之,对于n,可以把1...n分别作为root,答案为这些情况之和

考虑当把k做为root时,那么1到k-1必在左子树,k+1到n必在右子树,所以k为root时的所有个数为左子树的种数*右子树的种数


那么将k=1...n加起来,即为n时的种数了,通项公式为:


考虑到公式里每项r(?)都比r(n)小,所以只需要从小到大把r给算出来,算到n就可以了


答案:

class Solution {
public:
    int numTrees(int n) {
        vector <int> res;
        for (int i = 0; i<=n; i++){
            res.push_back(0);
        }
        res[0] = 1;
        res[1] = 1;
        
        for (int i = 2; i<=n; i++){
            for (int k = 1; k <=i; k++)
                res[i] = res[i] + res[k-1] * res[i-k];
        }
        return res[n];
    }
};





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值