https://leetcode.com/problems/unique-binary-search-trees/
动归
2015/9/14上午1:37:45
分析:
二叉搜索树,节点数为N,那么就有
根节点为1时,左侧为0个节点,右侧有n-1个节点,这种情况有F(0)*F(n-1);
根节点为2时,左侧为1个节点,右侧有n-2个节点,这种情况有F(1)*F(n-2);
...
......F(n-1)*F(0)
特别的,如果只有一个节点,F(1) = 1;F(0)=1;
这样就有 F(n) = 各种情况累加,得到递推式子。
class Solution {
public:
int numTrees(int n) {
int dp[n+1];
dp[0]=dp[1]=1;
// F(n) = F(0)F(n-1)+ ...
for(int i=2;i<n+1;++i){
dp[i] = 0;
for(int j=0;j<i;++j)
dp[i]+=dp[j]*dp[i-j-1];
}
return dp[n];
}
};
public:
int numTrees(int n) {
int dp[n+1];
dp[0]=dp[1]=1;
// F(n) = F(0)F(n-1)+ ...
for(int i=2;i<n+1;++i){
dp[i] = 0;
for(int j=0;j<i;++j)
dp[i]+=dp[j]*dp[i-j-1];
}
return dp[n];
}
};