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

LeetCode OJ:Unique Binary Search Trees

2014-01-22 22:46 288 查看


Unique Binary Search Trees

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


算法思想:

1、dp问题,dp[i]表示1到iBST个数,则有

对于新加入一个元素的个数其实也就是将1到i依次作为根节点,比如对于1节点,个数也就是1左边的个数假设为dp[0]乘以1右边的个数dp[i-1]。

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


2、递归

class Solution {
public:
int numTrees(int n) {
if(n==0)return 1;
int sum=0;
for(int i=1;i<=n;i++)
sum+=numTrees(i-1)*numTrees(n-i);
return sum;
}
};


3、根据dp[i]与dp[i-1]之间的关系,也可以把它理解成找规律,很直接

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