Given n, how many structurally unique BST’s (binary search trees) that store values 1 … n?
Example:
Input: 3 Output: 5 Explanation: 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
思路:在n的二叉搜索樹中中,假設i爲定點,則0~ i-1在i的左側,i+1~n在i的右側,以i爲頂點的二叉搜索樹的個數爲 左側i個數的個數*右側(n-i-1)的個數
class Solution {
Map<String, Integer> maps = new HashMap<>();
public int numTrees(int n) {
//return tree(1, n);
return tree2(n);
}
public int tree2(int n) {
if(n < 2) {
return 1;
}
int[] t = new int[n+1];
t[0] = 1;
t[1] = 1;
t[2] = 2;
for(int i = 3; i < n + 1 ; i++) {
for(int j = 1; j < i+1; j++) {
t[i] += t[j-1] * t[i-j];
}
}
return t[n];
}
public int tree(int l, int r) {
String temp = String.valueOf(l) + "_" + String.valueOf(r);
if(maps.containsKey(temp)) {
return maps.get(temp);
}
if(l == r) {
return 1;
}
if(l > r) {
return 0;
}
int num = 0;
//num += tree(l+1,r);
for(int i = l; i < r + 1; i++) {
int l1 = tree(l,i - 1);
int r1 = tree(i+1,r);
if(l1 == 0) {
num += r1;
} else if(r1 == 0) {
num += l1;
} else {
num = num + r1*l1;
}
}
maps.put(temp, num);
return num;
}
}