题目
思想
当数组为 1,2,3,4,… i,… n时,基于以下原则的BST建树具有唯一性:
以i为根节点的树,其左子树由[1, i-1]构成, 其右子树由[i+1, n]构成。
刚开始,知道这个是卡特兰数,想用公式 C 2 n n / ( n + 1 ) C_{2n}^n/(n+1) C2nn/(n+1)做,但是 C 2 n n C_{2n}^n C2nn太大了,会超过longlong,因此只能用动态规划做
代码
class Solution {
public:
int numTrees(int n) {
//if(n==1||n==0) return 1;
int c[n+1];
c[0]=1;
c[1]=1;
for(int i=2;i<=n;i++){
c[i]=0;
for(int j=0;j<=i-1;j++){
c[i]+=c[j]*c[i-1-j];
}
}
return c[n];
}
};

本文探讨了LeetCode上UniqueBinarySearchTrees题目的解法,介绍了如何利用动态规划算法来构建唯一二叉搜索树,并提供了详细的代码实现。通过递归地计算左子树和右子树的组合数量,避免了直接使用卡特兰数公式可能带来的溢出问题。
446

被折叠的 条评论
为什么被折叠?



