leetcode_96. 不同的二叉搜索树 动态规划

举报
悲恋花丶无心之人 发表于 2021/02/03 00:51:10 2021/02/03
【摘要】 目录 一、题目内容 二、解题思路 三、代码 一、题目内容 给定一个整数 n,求以 1 ... n 为节点组成的二叉搜索树有多少种? 示例: 输入: 3 输出: 5 解释: 给定 n = 3, 一共有 5 种不同结构的二叉搜索树:    1       &nbs...

目录

一、题目内容

二、解题思路

三、代码


一、题目内容

给定一个整数 n,求以 1 ... n 为节点组成的二叉搜索树有多少种?

示例:

输入: 3
输出: 5
解释:
给定 n = 3, 一共有 5 种不同结构的二叉搜索树:

   1         3     3      2      1
    \       /     /      / \      \
     3     2     1      1   3      2
    /     /       \                 \
   2     1         2                 3

二、解题思路

递归会超时,可以利用动态规划解决。

dp[0] = 1

dp[1] = 1

dp[2] = dp[0] * dp[1] +

             dp[1] * dp[0]

dp[3] = dp[0] * dp[2] +

             dp[1] * dp[1] + 

             dp[2] * dp[0]

...

dp[n] = dp[0] * dp[n-1] +

             dp[1] * dp[n-2] +

             ... +

             dp[n-2] * dp[1] +

             dp[n-1] * dp[0]

三、代码


  
  1. class Solution:
  2. def numTrees(self, n: int) -> int:
  3. dp = [0] * (n + 1)
  4. dp[0] = 1
  5. dp[1] = 1
  6. for i in range(2, n + 1):
  7. for j in range(0, i):
  8. dp[i] += dp[j] * dp[i - j - 1]
  9. return dp[n]
  10. # if n == 1 or n == 0:
  11. # return 1
  12. # res = 0
  13. # for i in range(1, n + 1):
  14. # res += self.numTrees(i-1) * self.numTrees(n-i)
  15. # return res
  16. if __name__ == '__main__':
  17. n = 3
  18. s = Solution()
  19. ans = s.numTrees(3)
  20. print(ans)

文章来源: nickhuang1996.blog.csdn.net,作者:悲恋花丶无心之人,版权归原作者所有,如需转载,请联系作者。

原文链接:nickhuang1996.blog.csdn.net/article/details/108716754

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。