-
Notifications
You must be signed in to change notification settings - Fork 20
/
UniqueBinarySearchTrees.js
81 lines (72 loc) · 1.45 KB
/
UniqueBinarySearchTrees.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
/**
* 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
*
* Accepted.
*/
/**
* Recursive solution. Time limit exceeded.
*
* @param {number} n
* @return {number}
*/
/*let numTrees = function (n) {
if (n === 0 || n === 1) {
return 1;
}
let r = 0;
for (let i = 1; i <= n; i++) {
r = r + numTrees(i - 1) * numTrees(n - i);
}
return r;
};*/
/**
* Dynamic programming. Accepted.
*
* @param {number} n
* @return {number}
*/
let numTrees = function (n) {
let array = new Int32Array(n + 2);
array[0] = 1;
array[1] = 1;
for (let i = 2; i <= n; i++) {
for (let j = 0; j < i; j++) {
array[i] += array[j] * array[i - j - 1];
}
}
return array[n];
};
if (numTrees(0) === 1) {
console.log("pass")
} else {
console.error("failed")
}
if (numTrees(1) === 1) {
console.log("pass")
} else {
console.error("failed")
}
if (numTrees(2) === 2) {
console.log("pass")
} else {
console.error("failed")
}
if (numTrees(3) === 5) {
console.log("pass")
} else {
console.error("failed")
}
if (numTrees(4) === 14) {
console.log("pass")
} else {
console.error("failed")
}