leetcode7: 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
class Solution { public: int numTrees(int n) { // Start typing your C/C++ solution below // DO NOT write int main() function vector<int> arr(n,-1); return numRec( n, arr); } int numRec(int n, vector<int> & arr){ if(n<=1) return 1; int sum = 0; for(int i=0; i<n; ++i){ if(arr[i] == -1) { arr[i] = numRec(i, arr); } if(arr[n-1-i] == -1) { arr[n-1-i] = numRec(n-1-i, arr); } sum += arr[i] * arr[n-1-i]; } return sum; } };second try. bottom up. isn't this one elegant?
public class Solution { public int numTrees(int n) { int[] d = new int[n+1]; d[0] = 1; d[1] = 1; for(int i=2; i<=n; i++) { for(int j=0; j<i; j++) { d[i] += d[j] * d[i-j-1]; } } return d[n]; } }