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];
    }
}


posted @ 2012-12-21 16:21  西施豆腐渣  阅读(94)  评论(0编辑  收藏  举报