96. Unique Binary Search Trees


做题历程:

  1. 本题做了不止一次了,本次独立解出,大概耗时5分钟

本题第一次做的时候感觉难度很高,但是现在再看,就非常简单了。本题的算法是Dynamic Programming, dp[i]代表当有i个node的时候,可能出现的BST的数量,则可以得出:dp[i] = dp[0] * dp[i-1] + dp[1] * dp[i-2] + ... + dp[i-1] * dp[0],当能得到这个递推公式的时候,就非常简单了。。 代码如下:

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

        return dp[n];
    }
};

results matching ""

    No results matching ""