LeetCode:96. Unique Binary Search Trees(找出独一无二搜索树)

文章最前: 我是Octopus,这个名字来源于我的中文名--章鱼;我热爱编程、热爱算法、热爱开源。所有源码在我的个人github ;这博客是记录我学习的点点滴滴,如果您对 Python、Java、AI、算法有兴趣,可以关注我的动态,一起学习,共同进步。

相关文章:

  1. LeetCode:55. Jump Game(跳远比赛)
  2. Leetcode:300. Longest Increasing Subsequence(最大增长序列)
  3. LeetCode:560. Subarray Sum Equals K(找出数组中连续子串和等于k)

目录

题目描述:

java实现方式1:

python实现方式1:


题目描述:

给定一个整数 n,求以 1 ... n 为节点组成的二叉搜索树有多少种?

示例:

输入: 3
输出: 5
解释:
给定 n = 3, 一共有 5 种不同结构的二叉搜索树:

   1         3     3      2      1
    \       /     /      / \      \
     3     2     1      1   3      2
    /     /       \                 \
   2     1         2                 3

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/unique-binary-search-trees
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

java实现方式1:

   /**
     * 不同的二叉搜索树
     *
     * @param n 数字
     * @return 二叉树
     */
    public int numTrees(int n) {
        int[] dp = new int[n + 1];
        dp[0] = 1;
        for (int i = 1; i <= n; i++) {
            int l = 0, r = i - 1, count = 0;
            while (l < r) {
                count += dp[l++] * dp[r--];
            }
            count *= 2;
            if (l == r) {
                count += dp[l] * dp[l];
            }
            dp[i] = count;
        }
        return dp[n];
    }

时间复杂度:O(n)

空间复杂度:O(n)


python实现方式1:

import  numpy as np
def num_trees(n: int) -> int:
    '''
        能生成多少中树
    Args:
        n: 节点数
    Returns:
        总共种数
    '''
    dp = np.zeros(n+1)
    dp[0] = 1
    for i in range(1, n + 1):
        l, r, count = 0, i - 1, 0
        while i < r:
            count += dp[l] * dp[r]
            l += 1
            r -= 1
        count *= 2
        if l == r:
            count += dp[l] * dp[l]
        dp[i] = count
    return dp[n]

时间复杂度:O(n)

空间复杂度:O(n)


源码地址:

https://github.com/zhangyu345293721/leetcode

你可能感兴趣的:(java高并发)