NC310. 不同的二叉搜索树(一)
描述
示例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] }