LintCode 163 · Unique Binary Search Trees (DP 或 Catalan数)

163 · Unique Binary Search Trees
Algorithms
Medium
Description
Given n, how many structurally unique BSTs (binary search trees) that store values 1…n?

Only $39.9 for the “Twitter Comment System Project Practice” within a limited time of 7 days!

WeChat Notes Twitter for more information(WeChat ID jiuzhang104)

Example
Example 1:

Input:n = 3,
Output: 5
Explanation:there are a total of 5 unique BST’s.
1 3 3 2 1
\ / / / \
3 2 1 1 3 2
/ / \
2 1 2 3

解法1:DP

class Solution {
public:
    /**
     * @param n: An integer
     * @return: An integer
     */
    int numTrees(int n) {
        if (n == 0) return 1;
        vector<int> dp(n + 1, 1); //记得这里default是1。因为左右子树为空的话,因为dp[j] * dp[i - j - 1],这里用到乘积,所以不能是0,必须是1.
        dp[1] = 1;
        for (int i = 2; i <= n; i++) {
            int sum = 0;
            for (int j = 0; j < i; j++) {
                sum += dp[j] * dp[i - j - 1];
            }
            dp[i] = sum;
        }
        return dp[n];
    }
};

解法2:Memorization. TBD
解法3:直接用Catalan数的公式。

你可能感兴趣的:(算法,leetcode)