/* * @lc app=leetcode id=96 lang=java * * [96] Unique Binary Search Trees */ // @lc code=start class Solution { /** * dp[n] = dp[n-1] + dp[1]+dp[n-2] * * @param n * @return */ public int numTrees(int n) { int[] dp = new int[n+1]; for(int i=1; i<=n; i++) { dp[i] = 0; } dp[1] = 1; for(int i=2; i<=n; i++) { for(int j=0; j<=i-1;j++) { int left = j>0?dp[j]:1; int right = i-1-j>0?dp[i-1-j]:1; dp[i] += left*right; } } return dp[n]; } } // @lc code=end