題目地址:https://leetcode-cn.com/problems/unique-binary-search-trees/
給定一個整數 n,求以 1 ... n 爲節點組成的二叉搜索樹有多少種?
示例:
輸入: 3
輸出: 5
解釋:
給定 n = 3, 一共有 5 種不同結構的二叉搜索樹:
1 3 3 2 1
\ / / / \ \
3 2 1 1 3 2
/ / \ \
2 1 2 3
思路
遇到這類問題,我們先自己看幾個例子
n = 1,只有1種二叉搜索樹
n = 2,有兩種二叉搜索樹
1 2
\ \
2 1
n = 3,有5種二叉搜索樹,如題。
拆解這道題,
- 1的右邊有n = 2(2,3),有2種可能
- 2的左右分別有n=1(1)和n=1(3),有1*1種可能
- 3的左邊有n = 2(1,2),有2種可能
- 把以上幾種可能累加,正好是5種可能
我們可以總結規律
就是對應n的二叉搜索樹的數目。
參考代碼
class Solution {
public:
int numTrees(int n) {
if (n <= 2) return n;
const int N = n + 1;
int sol[N];
sol[0] = 1;
sol[1] = 1;
sol[2] = 2;
for (int i = 3; i <= n; i++) {
sol[i] = 0;
for (int j = 0; j < i; j++) {
sol[i] += sol[j] * sol[i - j - 1];
}
}
return sol[n];
}
};