1. 程式人生 > >LeetCode 96. Unique Binary Search Trees

LeetCode 96. Unique Binary Search Trees

推公式 cas uniq 分析 unique turn mtr case trees

這道題和樹基本沒什麽關系,完全就是 Catalan Number。

給定一個數 i ,

1作為根,左邊有 0 個節點,右邊有 i-1 個節點

2作為根,左邊有 1 個節點,右邊有 i-2 個節點

...

i 作為根,左邊有 i-1 個節點,右邊有 0 個節點

記 dp[i] 為給定 i 時的個數,dp[n] 為所求

根據上述分析,得出遞推公式 dp[i] = sum_{j=0}^{i-1} dp[j] * dp[i-j-1]

base case: dp[0] = 1 因為空也算一種情況

class Solution {
public:
    int numTrees(int
n) { vector<int> dp(n+1); dp[0] = 1; for (int i=1;i<=n;++i){ for (int j=0;j<=i-1;++j){ dp[i] += dp[j]*dp[i-j-1]; } } return dp[n]; } };

LeetCode 96. Unique Binary Search Trees