Description
Given an integer n, return the number of structurally unique BST’s (binary search trees) which has exactly n nodes of unique values from 1 to n.
Examples
Example 1:
Input: n = 3
Output: 5
Example 2:
Input: n = 1
Output: 1
Constraints:
1 <= n <= 19
思路
最开始的时候想用递归,但后来想想,用dp也可以啊!
假设现在还剩下x个节点,在确定了root之后,左右分别的子节点数量可能为([0, x-1], [1, x-2], …, [x-1, 0])找之前的数组存储数值就可以了,通过排列组合,将左右子节点数量对应的可能结构数量相乘就是 x 对应的结构数量了。
代码
class Solution {
public int numTrees(int n) {
int[] count = new int[n + 1];
count[0] = 1;
count[1] = 1;
for (int i = 2; i <= n; i++) {
for (int j = 0; j < i; j++) {
count[i] += count[j] * count[i - 1 - j];
}
}
return count[n];
}
}