一、题目
二、代码
动态规划
设n个节点存在二叉排序树的个数是G(n),f(i)为以i为根的二叉搜索树的个数,则 G(n) = f(1) + f(2) + f(3) + f(4) + ... + f(n) f(i) = G(i-1)*G(n-i)
综合两个公式可以得到状态转移公式 G(n) = G(0)*G(n-1)+G(1)*G(n-2)+...+G(n-1)*G(0)
class Solution {
public int numTrees(int n) {
int[] dp = new int[n+1];
dp[0] = 1;
dp[1] = 1;
for(int i = 2; i < n + 1; i++){//i是值dp下标
for(int j = 1; j < i + 1; j++){
//将i假设为 n,则不难得到下述状态转移式
dp[i] += dp[j -1] * dp[i - j];
}
}
return dp[n];
}
}