zoukankan      html  css  js  c++  java
  • LEETCODE —— Unique Binary Search Trees [动态规划]

    Given n, how many structurally unique BST's (binary search trees) that store values 1...n?

    For example,
    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
    
     Tree Dynamic Programming
     
     
    如果集合为空,只有一种BST,即空树,
    UniqueTrees[0] =1

    如果集合仅有一个元素,只有一种BST,即为单个节点
    UniqueTrees[1] = 1
     

    UniqueTrees[2] = UniqueTrees[0] * UniqueTrees[1]   (1为根的情况)
                      + UniqueTrees[1] * UniqueTrees[0]  (2为根的情况。

    再看一遍三个元素的数组,可以发现BST的取值方式如下:
    UniqueTrees[3] = UniqueTrees[0]*UniqueTrees[2]  (1为根的情况)
                   + UniqueTrees[1]*UniqueTrees[1]  (2为根的情况)
                   + UniqueTrees[2]*UniqueTrees[0]  (3为根的情况)

    所以,由此观察,可以得出UniqueTrees的递推公式为
    UniqueTrees[i] = ∑ UniqueTrees[0...k] * [i-1-k]     k取值范围 0<= k <=(i-1)

     

     
    '''
    Created on Nov 13, 2014
     
    @author: ScottGu<gu.kai.66@gmail.com, kai.gu@live.com>
    '''
    class Solution :
        # @return an integer
        def numTrees( self , n):
            uniqueTrees={}
            uniqueTrees[ 0 ]=1
            uniqueTrees[ 1 ]=1
     
            for cnt in range( 2, n+ 1 ):
                uniqueTrees[cnt]= 0
                for k in range( 0, cnt):
                    uniqueTrees[cnt]+=uniqueTrees[k]*uniqueTrees[cnt- 1 -k]
     
            return uniqueTrees[n]
           
           
    if __name__ == '__main__' :
        sl=Solution()
        print sl.numTrees( 0 ), 0
        print sl.numTrees( 1 ), 1
        print sl.numTrees( 2 ), 2
        print sl.numTrees( 3 ), 3
        print sl.numTrees( 4 ), 4
        print sl.numTrees( 5 ), 5
  • 相关阅读:
    Mybatis学习(3)实现数据的增删改查
    Mybatis学习(2)以接口的方式编程
    Mybatis学习(1)开发环境搭建
    Apache Commons 工具类介绍及简单使用
    JAVA枚举使用详解
    Spring中的<context:annotation-config/>配置
    SpringMVC(12)完结篇 基于Hibernate+Spring+Spring MVC+Bootstrap的管理系统实现
    SpringMVC(11)表单标签
    面试题
    开发辅助网址
  • 原文地址:https://www.cnblogs.com/scottgu/p/4105540.html
Copyright © 2011-2022 走看看