Unique Binary Search Trees
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 3 3 2 1 \ / / / \ 3 2 1 1 3 2 / / \ 2 1 2 3
设S(n)为n个节点的unique BST个数,有这样的递推公式:S(n) = sigma(S(i) * s(n - 1 - i))(i from 0 to n - 1);当然n = 0时,没有节点也是一种情况,S(0) = 1;在这个递归式里面,我们可以看到重叠子问题,考虑用DP解法,做一个向量,自底向上来簿记S(n);没什么需要注意点,非常基本的利用簿记的思路。以下是代码:
class Solution { public: int numTrees(int n) { int sum; vector<int> a(n + 1); a[0] = 1; for (int i = 1; i <= n; i++){ a[i] = 0; sum = 0; for (int j = 0; j < i; j++){ sum += a[j] * a[i - 1 - j]; } a[i] = sum; } return a[n]; } };
这里, a[0]一定要先初始化,不然会有问题。
LeetCode:: Unique Binary Search Trees[详细分析]
时间: 2024-10-12 00:02:02