Reference
96. 不同的二叉搜索树 - 力扣(LeetCode)题解 卡特兰数
Problem: 96. 不同的二叉搜索树
思路
dp数组的含义:i个节点有dp[i]
种二叉搜索树
递推数组:有n个节点,头节点为j时,左子树有多少种二叉搜索树 x 右子树有多少总二叉搜索树
注意:头节点只能从1开始
复杂度
时间复杂度:
添加时间复杂度, 示例: $O(n)$
空间复杂度:
添加空间复杂度, 示例: $O(n)$
Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| class Solution { public: int numTrees(int n) { vector<int> dp(n + 1, 0); dp[0] = 0;dp[1] = 1;dp[2] = 2; for(int i = 2; i < n + 1; i++) for(int j = 1; j < i + 1; j++) dp[i] += dp[j-1] * dp[i-j]; return dp[n]; } };
|
[]1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| class Solution {
public:
int numTrees(int n) {
vector<int> dp(n + 1, 0);
dp[0] = 1;
for (int i = 1; i < n + 1; i++) {
for (int j = 1; j <= i; j++) {
dp[i] += dp[i - j] * dp[j - 1];
}
}
return dp[n];
}
};
|