给定一个整数 n ,求以 1 … n 为节点组成的二叉搜索树有多少种?
<strong>输入:</strong> 3 <strong>输出:</strong> 5 <strong>解释: </strong>给定 <em>n</em> = 3, 一共有 5 种不同结构的二叉搜索树: 1 3 3 2 1 / / / / / / 3 2 1 1 3 2 / / / / 2 1 2 3
当有n个节点时( 1 –n),任何一个数都可以当成根节点,左边j个节点,右边是n-j- 1 个节点 所以就有nums[n] = nums[ 0 ]*nums[n]+nums[ 1 ]*nums[n- 1 ]+nums[ 2 ]*nums[n- 2 ]+ … +nums[n]*nums[ 0 ]; 因此我们需要先求出nums[ 0 ]–nums[n- 1 ] 最后返回nums[n]即可。
class Solution { public int numTrees(int n) { if(n<=0) return 0; int[] res = new int[n+1]; res[0] = 1; res[1] = 1; for(int i=2;i<=n;i++) { for(int j=0;j<i;j++) { res[i] += res[j]*res[i-j-1]; } } return res[n]; } }