博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LEETCODE —— Unique Binary Search Trees [动态规划]
阅读量:4992 次
发布时间:2019-06-12

本文共 1387 字,大约阅读时间需要 4 分钟。

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

 

   
 
 
如果集合为空,只有一种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

转载于:https://www.cnblogs.com/scottgu/p/4105540.html

你可能感兴趣的文章
【vijos】【树形dp】佳佳的魔法药水
查看>>
聚合新闻头条
查看>>
Ubuntu 关闭锁屏界面的 on-screen keyboard
查看>>
凸优化学习笔记
查看>>
使用ehcache-spring-annotations开启ehcache的注解功能
查看>>
Charles设置HTTPS抓包
查看>>
NGUI出现Shader wants normals, but the mesh UIAtlas doesn&#39;t have them
查看>>
Boost.Asio c++ 网络编程翻译(14)
查看>>
Codeforces Round #306 (Div. 2) D.E. 解题报告
查看>>
uva 1557 - Calendar Game(博弈)
查看>>
HDU1051 Wooden Sticks 【贪婪】
查看>>
十大经典数据挖掘算法
查看>>
Rhythmbox乱码的解决的方法
查看>>
中纪委:抗震中官员临危退缩玩忽职守将被严处
查看>>
MySQL 8.0.12 基于Windows 安装教程
查看>>
在hue中使用hive
查看>>
eclipse快捷键
查看>>
在指定文本里记录内容
查看>>
Android WebView常见问题及解决方案汇总
查看>>
[BZOJ4025]二分图
查看>>