码迷,mamicode.com
首页 > 编程语言 > 详细

Unique Binary Search Trees 三种解法 python

时间:2014-10-09 14:37:53      阅读:215      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   io   os   ar   for   strong   

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


递归版,也是AC
class Solution:
    @return an integer
    # 2014年10月9日,需要改为dp,这个是递归的
    def numTrees(self, n):
        if n ==1 or n ==0:
            return 1
        else:
            i=1
            sum=0
            while i<=n:
                sum =sum+self.numTrees(i-1)*self.numTrees(n-i)
                i =i+1
            return sum

dp版,当然也能AC

class Solution:
    # @return an integer
    def numTrees(self, n):
        dp = [0 for i in xrange(n+1)]
        dp[0] = 1
        for nodeNum in xrange(1, n+1):
            for leftSubNum in xrange(nodeNum):
                dp[nodeNum] += dp[leftSubNum] * dp[nodeNum - 1 - leftSubNum]
        return dp[n]

代码是抄http://chaoren.is-programmer.com/posts/42907.html的

 

最后是利用catalan数来求解

#卡塔兰版
class Solution:
    # @return an integer
    def numTrees(self, n):
        catalan =[1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 742900, 2674440, 9694845, 35357670, 129644790, 477638700, 1767263190]
        return catalan[n]

这个时间复杂度还是o(1)呢,/窃笑

 

Unique Binary Search Trees 三种解法 python

标签:style   blog   http   color   io   os   ar   for   strong   

原文地址:http://www.cnblogs.com/zhidan/p/4012739.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!