您的位置:首页 > 产品设计 > UI/UE

leetcode 刷题之路 49 Unique Binary Search Trees

2014-08-07 19:35 274 查看
Given n, how many structurally unique BST's (binary search trees) that store values 1...n?

For example,

Given n = 3, there are a total of 5 unique BST's.
1         3     3      2      1
    \       /     /      / \      \
     3     2     1      1   3      2
    /     /       \                 \
   2     1         2                 3


Given 题目要求求数字1~n构成的二叉查找树共有多少种。

采用动态规划求解。使用dp数组保存中间计算结果,dp[i]表示1~i个数字构造的二叉查找树个数,dp[0],dp[1]为1,对于任意的数字0,1,2...i,可以这样构造一个查找二叉树,以数字j为根节点,数字1~j-1构造其左子树,数字j+1~i构造其右子树,j的取值为1~i,对于每个j,构造的查找二叉树可能有dp[i-j-1]*dp[j]种,所有j对应的二叉树种类数加起来就是dp[i]的值,可以看出,这是一个递归求解的问题,要求的n=i时的结果,必须知道n=0.......n-1时的结果,故可以采用递归求解,但是直接使用递归求解时间复杂度会呈指数增长,这里采用动态规划的方法,保存每次的计算结果,避免了大量运算,时间复杂度为O(n^2)。

AC code:

class Solution {
public:
    int numTrees(int n) 
    {
        int *dp=new int[n+1];
        memset(dp,0,(n+1)*sizeof(int));
        dp[0]=dp[1]=1;
        for(int i=2;i<=n;i++)
        {
            for(int j=0;j<=i-1;j++)
            {
                dp[i]=dp[i]+dp[j]*dp[i-1-j];
            }
        }
        int ret=dp
;
        delete []dp;
        return ret;
    }
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: