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

  • 相关阅读:
    十二周作业
    十一周作业
    第十周作业
    第九周作业
    第八周作业
    第七周作业
    2019年第六周作业
    第五周作业总结
    介绍自己
    第一学期总结
  • 原文地址:https://www.cnblogs.com/nenu/p/14592171.html
Copyright © 2011-2022 走看看