zoukankan      html  css  js  c++  java
  • 牛客网每日一练

    #
    # 
    # @param n int整型 
    # @return int整型
    #
    class Solution:
        def numTrees(self , n ):
            dp = [0 for i in range(n+1)]
            dp[0] = 1
            dp[1] = 1
            for j in range(2, n+1):
                for k in range(1, j+1):
                    dp[j] += dp[j-k]*dp[k-1]
            return dp[n]
    给定一个值n,能构建出多少不同的值包含1...n的二叉搜索树(BST)?
    例如
    给定 n = 3, 有五种不同的二叉搜索树(BST)
    解题思路:
        1.首先了解什么是BST?    

          BST(Binary Search Tree)目的是为了提高查找的性能,其查找在平均和最坏的情况下都是logn级别,接近二分查找。

          其特点是:每个节点的值大于其任意左侧子节点的值,小于其任意右节点的值。

        2.我们用f(n)表示对n的求解结果,在草稿上画画,你就知道

          f(0) = 1

          f(1) = 1;
          f(2) = f(1)+f(1);
          f(3) = f(2)+f(1)f(1)+f(2);
          f(4) = f(3)+f(1)
    f(2)+f(2)f(1)+f(3)
          f(5) = f(4)+f(1)
    f(3)+f(2)f(2)+f(3)*f(1)+f(4)

          f(n) = f(n-k)*f(k-1)    k=1,2,....,n

  • 相关阅读:
    #考研碎碎念#
    #考研笔记#计算机之病毒
    #考研笔记#计算机之多媒体应用
    #考研笔记#计算机之PPT问题
    第六章深入理解类
    第五章方法
    类的基本教程
    类型存储变量
    C#和.net框架
    C#编程概述
  • 原文地址:https://www.cnblogs.com/nenu/p/14592171.html
Copyright © 2011-2022 走看看