LeetCode 95. Unique Binary Search Trees

来源:互联网 发布:ubuntu 日志 编辑:程序博客网 时间:2024/06/13 14:30

给定n, 求不同的BST的数目。

递归应该会超时,动态规划。dp[i]代表节点数为i时,数的种类。


对给定的n, BST的数目应该等于:

左子树节点数为0的种类 * 右子树节点数为n-1的种类 +

左子树节点数为1的种类 * 右子树节点数为n-2的种类 +

...

左子树节点数为n-1的种类 * 右子树节点数为0的种类

注意到左子树节点数为n-1的种类右子树节点数为n-1的种类是相同的,都为dp[n-1].(虽然这两种数包含的val并不相等,但它们结构相同,种类数量相同)


代码:

class Solution {public:    int numTrees(int n)     {        vector<int> dp(n+1, 0);        dp[0] = 1;        for (int i = 1; i <= n; ++ i)        {        for (int j = 0; j <= i-1; ++ j)        {        dp[i] += (dp[j] * dp[i-1-j]);        }        }        return dp[n];    }};


0 0