列表

详情


NC310. 不同的二叉搜索树(一)

描述

给定一个由节点值从 1 到 n 的 n 个节点。请问由多少种不同的方法用这 n 个节点构成互不相同的二叉搜索树。
请你输出有多少种方法。

例如:当n=2时有


数据范围:

示例1

输入:

2

输出:

2

示例2

输入:

3

输出:

5

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++ 解法, 执行用时: 3ms, 内存消耗: 396KB, 提交时间: 2022-06-18

class Solution {
  public:
    int BSTCount(int n) {
        int a[n + 1];
        a[0] = 1;
        a[1] = 1;
        for (int i = 2; i <= n; i++) {
            a[i] = 0;
            for (int j = 1; j <= i; j++) {
                a[i] += a[j - 1] * a[i - j];
            }
        }
        return a[n];
    }
};

C 解法, 执行用时: 3ms, 内存消耗: 416KB, 提交时间: 2022-06-18

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

C++ 解法, 执行用时: 3ms, 内存消耗: 464KB, 提交时间: 2022-05-13

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param n int整型 
     * @return int整型
     */
    int BSTCount(int n) {
        // write code here
        // dp[i]: 表示由i个互不相同的结点构成的
        //        搜索二叉树的种树
        int dp[n + 1];
 
        // base case
        dp[0] = 1;
        dp[1] = 1;
 
        /*
         * 状态转移方程:
         *   dp[i] = sum(dp[j - 1] * dp[i - j]), j = 1,...,i
         * */
        for (int i = 2; i <= n; i++) {
            dp[i] = 0;
            for (int j = 1; j <= i; j++) {
                dp[i] += dp[j - 1] * dp[i - j];
            }
        }
 
        return dp[n];
    }
};

C++ 解法, 执行用时: 3ms, 内存消耗: 504KB, 提交时间: 2022-07-19

static const auto io_sync_off = [](){
    std::ios::sync_with_stdio(false);
    std::cout.tie(nullptr);
    std::cin.tie(nullptr);
    return nullptr;
}();
class Solution {
public:
    int BSTCount(int n) {
        vector<int>dp(n+1);
        dp[0]=1;
        for(int i=1;i<=n;i++)
            for(int j=1;j<=i;j++)
                dp[i]+=dp[j-1]*dp[i-j];
        return dp[n];
    }
};

Go 解法, 执行用时: 3ms, 内存消耗: 940KB, 提交时间: 2022-06-18

package main

func BSTCount(n int) int {
	a := make([]int, n+1)
	a[0] = 1
	a[1] = 1
	for i := 2; i <= n; i++ {
		a[i] = 0
		for j := 1; j <= i; j++ {
			a[i] += a[j-1] * a[i-j]
		}
	}
	return a[n]
}

上一题