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
2
3
4
5
1 3 3 2 1
\ / / / \ \
3 2 1 1 3 2
/ / \ \
2 1 2 3

求方案的个数,一般是用动归做

  • State: dp[i] 指有i个节点的BST有多少种组成方案
  • Function: dp[i] = dp[0] dp[i - 1] + dp[1] dp[i - 2] + … + dp[i - 1] * dp[0]
  • Init: dp[0] = 1
  • Answer: dp[n]
1
2
3
4
5
6
7
8
9
10
11
12
public int numTrees(int n) {
if (n < 0)
return -1;
int[] dp = new int[n + 1];
dp[0] = 1;
for (int i = 1; i <= n; i++) {
for (int j = 0; j < i; j++) {
dp[i] = dp[i] + dp[j] * dp[i - j - 1];
}
}
return dp[n];
}