96. Unique Binary Search Trees

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
2
3
4
5
6
>    1         3     3      2      1
> \ / / / \ \
> 3 2 1 1 3 2
> / / \ \
> 2 1 2 3
>

>

题意:给一个数字n,计算把[1,n]组成一颗二叉树有多少种方式。

Code:

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
//
// Created by cpz on 2017/11/23.
//

#include "head.h"

class Solution {
public:
int numTrees(int n)
{
vector<vector<int>> dp(n + 2, vector<int>(n + 2, 1));
for (int len = 1; len < n; ++len)
{
for (int start = 1; start + len<= n ; ++start)
{
int end = start + len ;
int sum = 0;
for (int k = start; k <= end ; ++k)
{
sum+=dp[start][k-1]*dp[k+1][end];
}
dp[start][end] = sum;
}
}
return dp[1][n];
}
};