LeetCode 96. 不同的二叉搜索樹

題目

給你一個(gè)整數(shù) n ,求恰由 n 個(gè)節(jié)點(diǎn)組成且節(jié)點(diǎn)值從 1 到 n 互不相同的二叉搜索樹有多少種?返回滿足題意的二叉搜索樹的種數(shù)。

例:
輸入:n = 3
輸出:5

方法:動(dòng)態(tài)規(guī)劃
  • dp[i] 記錄由 i 個(gè)節(jié)點(diǎn)組成且節(jié)點(diǎn)值從 1 到 i 互不相同的二叉搜索樹的種數(shù),初始均為 0
  • 由 0 個(gè)節(jié)點(diǎn)組成的二叉搜索樹有一種,由 1 個(gè)節(jié)點(diǎn)組成的二叉搜索樹有一種
  • 循環(huán)遍歷,記錄從由 2 個(gè)節(jié)點(diǎn)組成的二叉搜索樹到由 n 個(gè)節(jié)點(diǎn)組成的二叉搜索樹的種樹。因?yàn)楦?jié)點(diǎn)的值是不固定的,那么內(nèi)層循環(huán)的參數(shù) j 表示根節(jié)點(diǎn)的值,不同根節(jié)點(diǎn)產(chǎn)生的樹種和即為最后的二叉搜索樹的種數(shù)。而每個(gè)根節(jié)點(diǎn)所產(chǎn)生的二叉搜索樹的種樹,由其左子樹的種樹與右子樹的種樹的乘積得到
class Solution(object):
    def numTrees(self, n):
        dp = [0] * (n + 1)
        dp[0], dp[1] = 1, 1
        for i in range(2, n + 1):
            for j in range(1, i + 1):
                dp[i] += dp[j-1] * dp[i-j]
        return dp[n]
參考

代碼相關(guān):https://programmercarl.com/0096.%E4%B8%8D%E5%90%8C%E7%9A%84%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容