赞
踩
思路(动态规划):
注意:长度相同时的连续数能构成的二叉搜索树的方案数是相同的
如 1 2 3 4 5 和 6 7 8 9 10 能够构成的方案数是相同的(1 2 3 4 5通过值映射就可以得到6 7 8 9 10)。
与[LeetCode]95. 不同的二叉搜索树 II(java实现)dfs相同,对于每个长度为 i的二叉树 ,都可以任选一根节点 j ,让左右子树的任一方案进行组合。因此,我们用f[i]表示长度为i的二叉搜索树的方案数,则所有方案为所有根节点的方案数之和,取 j 为根节点时的方案数如下:
闫式dp分析法:
---------------------------------------------------解法---------------------------------------------------:
class Solution {
public int numTrees(int n) {
int[] f = new int[n+1];
f[0] = 1; // 这里如果是加法计数原理的话通常是初始状态为0,乘法计数原理的话初始状态一般是1
for(int i = 1;i <= n;i++)
for(int j = 1;j <= i;j++)
f[i] += f[j-1] * f[i-j];
return f[n];
}
}
可能存在的问题:
长度相同时的连续数能构成的二叉搜索树的方案数是相同的
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。