LetCode-Unique Binary Search Trees [동적 계획]

2440 단어 Binary search
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
 
Unique Trees[2] = Unique Trees[0] * Unique Trees[1] (1이 루트인 경우) + Unique Trees[1] * * Unique Trees[0] (2가 루트인 경우) + Unique Trees[1]+ Unique Trees[2]*Unique Trees[0](3이 뿌리인 경우) 따라서 관찰한 결과 Unique Trees의 추이 공식은 Unique Trees[i] = ∑ Unique Trees[0...k] * [i-1-k] k 수치 범위 0<=k <=(i-1)
 
 
'''
Created on Nov 13, 2014
 
@author:
 ScottGu
'''
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

좋은 웹페이지 즐겨찾기