LeetCode 96 Unique Binary Search Trees
概述
https://leetcode.com/problems/unique-binary-search-trees/
动态规划法
拿到题目,第一反应可以根据第 n-1 的个数推断出 n 的个数。
仔细想了想,貌似挺麻烦的。
其实可以通过遍历一遍轮流作为根节点来解决问题。
class Solution {
public:
    vector<int> dp;
    int numTrees(int n) {
        vector<int> dp(n+1, -1);
        dp[0] = 1;
        dp[1] = 1;
        this->dp = dp;
        return helper(n);
    }
    
    int helper(int n) {
        if (dp[n] != -1) return dp[n];
        int count = 0;
        for (int i = 0; i < n; i ++) {
            int ln = i - 0;
            int rn = n - i - 1;
            count += helper(ln) * helper(rn);
        }
        dp[n] = count;
        return count;
    }
};