96. 不同的二叉搜索树

曾经终败给现在 2023-02-26 09:23 111阅读 0赞

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

示例:

在这里插入图片描述

来源:力扣(LeetCode)添加链接描述

我的代码:

  1. class Solution {
  2. public:
  3. int numTrees(int n) {
  4. int dp[n+1];
  5. if(n == 1) return 1;
  6. if(n == 2) return 2;
  7. dp[0] = 1;
  8. dp[1] = 1;
  9. dp[2] = 2;
  10. for(int i = 3; i <= n; i++){
  11. dp[i] = 0;
  12. for(int j = 1; j <= i/2; j++){
  13. dp[i] += dp[i-j]*dp[j-1]*2;
  14. }
  15. if(i % 2 == 1) dp[i] += dp[i/2]*dp[i/2];
  16. }
  17. return dp[n];
  18. }
  19. };

官方题解:
动态规划:

  1. class Solution {
  2. public:
  3. int numTrees(int n) {
  4. vector<int> G(n + 1, 0);
  5. G[0] = 1;
  6. G[1] = 1;
  7. for (int i = 2; i <= n; ++i) {
  8. for (int j = 1; j <= i; ++j) {
  9. G[i] += G[j - 1] * G[i - j];
  10. }
  11. }
  12. return G[n];
  13. }
  14. };

卡特兰数:
在这里插入图片描述

  1. class Solution {
  2. public:
  3. int numTrees(int n) {
  4. long long C = 1;
  5. for (int i = 0; i < n; ++i) {
  6. C = C * 2 * (2 * i + 1) / (i + 2);
  7. }
  8. return (int)C;
  9. }
  10. };

发表评论

表情:
评论列表 (有 0 条评论,111人围观)

还没有评论,来说两句吧...

相关阅读