描述
该题来自于力扣第96题
分析
与力扣第95题不同之处在于只需要求个数,不需要求具体树结构,虽然可以直接用第95题题解,加个返回长度即可;但是只是求个数,其实可以用动态规划。
因为是大问题化解成小问题,可以发现树的构成个数之和输入数组长度有关,所以如果用dp[i]
表示长度为i
的数组构成的搜索二叉树的个数,那么一个长度为n
的数组,选定一个根结点k
时,左边还有k-1
个数,右边还有n-k
个数,从而左子树有dp[k-1]
种,右子树有dp[n-k]
种,从而dp[k-1]*dp[n-k]
就是根节点为k
时的所有树的个数。
从而dp[n]
依然于前面所有的状态,转移方程就是
\[
dp[n] = \sum_{i=1}^n dp[i-1]*dp[n-i]
\]
代码
1 | class Solution: |