动态规划

LeetCode96. Unique Binary Search

2017-06-25  本文已影响34人  PentonBin

一、原题

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,求问由1~n的数字所构成的不同二叉搜索树(BST)的数目。


三、思路

先从简单的分析起:

....

综上,假设要求数目为n的BST数目,dp[i]用来表示数量为i的BST数目

故 $$dp[n] = \sum\limits_{i = 1}^{n - 1} (dp[n - i] * dp[i - 1])$$


四、代码

class Solution {
public:
    int numTrees(int n) {
        if(n <= 1){
            return 1;
        }

        int *dp = new int[n + 1];
        dp[0] = 1;
        dp[1] = 1;

        for(int i = 2; i <= n; ++i){
            dp[i] = dp[i - 1];
            for(int j = 1; j < i; ++j){
                dp[i] += dp[i - j] * dp[j - 1];
            }
        }

        int res = dp[n];
        delete[] dp;
        return res;
    }
};
上一篇下一篇

猜你喜欢

热点阅读