Problem Description
Given n, how many structurally unique BST’s (binary search trees) that store values 1…n?
[https://leetcode.com/problems/unique-binary-search-trees/]
思路
DP!状态转移方程:
DP[n]=DP[0]*DP[n-1]+DP[1]*Dp[n-2]+….+DP[n-1]*DP[0];
最优子结构:如果n-1各节点有DP[n-1]个树,那么n个结点可以分成(0,n-1),(1,n-2),…..(n-1,0)个子树进行求解。
重叠子问题:DP[n]的计算需要DP[n-1]….DP[0]
Code
package q096;
public class Solution {
public int numTrees(int n) {
if(n<1) return 0;
int[] num=new int[n+1];
num[0]=1;
num[1]=1;
for(int i=2;i<=n;i++){
for(int j=1;j<=i;j++){
num[i]+=num[j-1]*num[i-j];
}
}
return num[n];
}
// public static void main(String[] args) {
// Solution s=new Solution();
// System.out.print(s.numTrees(0));
//
// }
}