【算法】斐波那契數列vs卡塔蘭數列DP

1. 斐波那契數列

公式:

\small f(n) = \left\{\begin{matrix} 1, & n = 0 \\ 1, & n = 1\\ f(n-1) + f(n-2),& otherwise \end{matrix}\right.

應用:爬樓梯

假設你正在爬樓梯。需要 n 階你才能到達樓頂。每次你可以爬 1 或 2 個臺階。你有多少種不同的方法可以爬到樓頂呢?

class Solution:
    def climbStairs(self, n):
        if n <= 1:
            return 1
        res = [0 for i in range(n+1)]
        res[0] = 1 #0層樓梯不用爬,1種
        res[1] = 1
        for i in range(2, n+1):
            res[i] = res[i-1] + res[i-2]
        return res[-1]

2. 卡塔蘭數

公式:

 \small C_n = \sum _{i=1}^{n}C_{i-1} * C_{n-i}

應用:不同二叉搜索樹

給定一個整數 n,求以 1 ... n 爲節點組成的二叉搜索樹有多少種?

二叉搜索樹,左子樹節點小於根,右子樹節點大於根。遞歸求解:

res[i]表示有i個節點時,樹的種類數。初始化res[i] = 0。

n == 0時,只有一種樹,res[0] = 1

n == 1時,當以1爲根時,左子樹種類數res[0], 右子樹種類數res[0], 則res[1] = res[0]*res[0]

n== 2 時,當以1爲根時,左子樹種類數res[0], 右子樹種類數res[1], 則res[2] += res[0]*res[1]

                  當以2爲根時,左子樹種類數res[1], 右子樹種類數res[0],則res[2] += res[1]*res[0]

以此類推。。。

class Solution:
    def numTrees(self, n):
        """
        :type n: int
        :rtype: int
        """
        #res[i] 指i個數時,二叉搜索樹個數
        res = [0 for i in range(n+1)]
        res[0] = 1 #n爲0時,個數爲1
        for i in range(1, n+1):
            #當n爲i時,樹的個數爲以1~i每個數爲根時左子樹*右子樹
            for j in range(1,i+1):
                res[i] += res[j-1]*res[i-j]
        return res[-1]

應用:不同的二叉搜索樹II

class Solution:
    def generateTrees(self, n):
        """
        :type n: int
        :rtype: List[TreeNode]
        """
        if n < 1:
            return []
        return self.generate( 1, n)
    
    def generate(self,start,end):
        res = []
        if start > end:
            res.append(None)
            return res
        for i in range(start, end+1):
            left = self.generate(start, i-1)
            right = self.generate(i+1,end)
            for l in left:
                for r in right:
                    root = TreeNode(i)
                    root.left = l
                    root.right = r
                    res.append(root)
        return res

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章