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]; }这种求数量的题目一般都容易想到用动态规划的解法,这道题的模型正好是卡特兰数的定义。当然这道题还可以用卡特兰数的通项公式来求解,这样时间复杂度就可以降低到O(n)。因为比较直接,这里就不列举代码了。
Unique Binary Search Trees -- LeetCode
原文地址:http://blog.csdn.net/linhuanmars/article/details/24761459