leetcode7: Unique Binary Search Trees

来源:互联网 发布:下载dreamweaver软件 编辑:程序博客网 时间:2024/06/05 21:15

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


原创粉丝点击