首页 > 算法 > [LeetCode每日一题]96. Unique Binary Search Trees
2020
03-06

[LeetCode每日一题]96. Unique Binary Search Trees

题目如下:

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

96. Unique Binary Search Trees
给定一个自然数n,求由1-n组成的不同的二叉搜索树的个数。这道题可以用动态规划解决。设dp(i)表示输入为i时的解,则该问题的解为dp(n)。设f(i)表示以i为根的二叉搜索树的个数,则有:

dp(n) = f(1) + f(2) +f(3) + ... + f(n)
f(i) = dp(i-1) * dp(n-i)

整理上述式子,得

dp(n) = dp(0)*dp(n-1) + dp(1)*dp(n-2) + dp(2)*dp(n-3) + ... + dp(n-1)*dp(0)

代码实现如下:

class Solution {
    public int numTrees(int n) {
        if (n == 0) {
            return 0;
        }
        int[] dp = new int[n + 1];
        dp[0] = 1;
        dp[1] = 1;
        for (int i = 2; i <= n; i++) {
            for (int j = 0; j < i; j++) {
                dp[i] += dp[j] * dp[i - 1 - j];
            }
        }
        return dp[n];
    }
}
最后编辑:
作者:lwg0452
这个作者貌似有点懒,什么都没有留下。
捐 赠如果您觉得这篇文章有用处,请支持作者!鼓励作者写出更好更多的文章!

留下一个回复

你的email不会被公开。