Given n, how many structurally unique BST's (binary search trees) that store values 1 ... n?

Example:

Input: 3
Output: 5
Explanation:
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

 

Approach #1: DP. [C++]

class Solution {
public:
    int numTrees(int n) {
        vector<int> nums(n+1);
        nums[0] = 1;
        nums[1] = 1;
        
        for (int i = 2; i <= n; ++i) {
            for (int j = 0; j <= i-1; ++j) {
                nums[i] += nums[j] * nums[i-1-j];
            }
        }
        
        return nums[n];
    }
};

  

Analysis:

status: nums[n] represent that there have n nodes the result of BST's number.

init: nums[1] = 1, nums[0] = 1;

function: ∑(nums[j] * nums[i-1-j]);

result: nums[n]

 

永远渴望,大智若愚(stay hungry, stay foolish)