【LeetCode】Unique Binary Search Trees,leetcodebinary
題意:
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
思路:
n = 0 時,空樹,只有一棵。n = 1 時,只有一種可能,也是 1。
n >= 2 時,對 12....n,分別以 i 為根節點,那麼左邊有 i-1 個節點,右邊有 n-i-1 個節點,所以
f[n] += f[k-1]*f[n-k-1], k = 1,2,....,n-1
代碼:
C++:
class Solution {public: int numTrees(int n) { int *cnt = new int[n+1]; memset(cnt,0,(n+1)*sizeof(int)); cnt[0] = 1; cnt[1] = 1; for(int i = 2;i <= n;i++) for(int j = 0;j < i;++j) cnt[i] += cnt[j]*cnt[i-j-1]; int sum = cnt[n]; delete []cnt; return sum; }};
Python:
class Solution: # @return an integer def numTrees(self, n): f = [0 for x in range(0,n+1)] f[0] = 1 f[1] = 1 for i in range(2,n+1): for j in range(0,i): f[i] += f[j]*f[i-j-1] return f[n]