0
点赞
收藏
分享

微信扫一扫

【从0到1冲刺蓝桥杯国赛】每日一题——不同的二叉搜索树(卡塔兰数)

不同的二叉搜索数icon-default.png?t=M276https://leetcode-cn.com/problems/unique-binary-search-trees/

题目描述: 

给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。

思路: 

 其实这也是卡塔兰数的推导方法

 

 

动态规划C++:

class Solution {
public:
    int numTrees(int n) {
        vector<int> G(n + 1, 0);
        G[0] = 1;
        G[1] = 1;

        for (int i = 2; i <= n; ++i) {
            for (int j = 1; j <= i; ++j) {
                G[i] += G[j - 1] * G[i - j];
            }
        }
        return G[n];
    }
};

 卡塔兰数:

class Solution {
public:
    int numTrees(int n) {
        long long C = 1;
        for (int i = 0; i < n; ++i) {
            C = C * 2 * (2 * i + 1) / (i + 2);
        }
        return (int)C;
    }
};

 


方法:

动态规划、卡塔兰数 

 

 

举报

相关推荐

0 条评论