Given n, how many structurally unique BST's (binary search trees) that store values 1...n?
For example,
Given n = 3, there are a total of 5 unique BST's.
1 3 3 2 1 \ / / / \ \ 3 2 1 1 3 2 / / \ \ 2 1 2 3
Subscribe to see which companies asked this question
1 public class Solution { 2 public int numTrees(int n) { 3 if(n == 0 || n == 1) return 1; 4 int[] ans = new int[n+1]; 5 ans[0] = 1; 6 //ans[1] = 1; 7 for(int i = 1;i<=n;i++){ 8 for(int j = 0; j<i; j++){ 9 ans[i] += ans[j]*ans[i-j-1]; 10 } 11 } 12 return ans[n]; 13 } 14 }
定义 ans[i] 为以 [1; i] 能产生的 Unique Binary Search Tree 的数目, 既可以用动态规划来做。
其实两层for循环,可以用递归的方式来做。
只需要一个存储答案的单元cnt。
另外还看到网上有用卡塔兰数做的,有兴趣的可以了解下。
第二题: