LintCode-不同的二叉查詢樹
阿新 • • 發佈:2019-02-11
給出 n,問由 1...n 為節點組成的不同的二叉查詢樹有多少種?
樣例給出n = 3,有5種不同形態的二叉查詢樹:
1 3 3 2 1
\ / / / \ \
3 2 1 1 3 2
/ / \ \
2 1 2 3
分析:只要記錄下有x個不同的數的情況下有多少種解法,不適合用遞迴,在資料量較大的情況下,於是可以用記憶化搜尋。我這裡直接用一個數組儲存結果了= =
程式碼:
class Solution { public: /** * @paramn n: An integer * @return: An integer */ int numTrees(int n) { // write your code here int * dp = new int[n+1]; fill(dp,dp+n+1,0); dp[0]=dp[1]=1; for(int i=2;i<=n;i++) { for(int j=1;j<=i;j++) dp[i]+= dp[j-1]*dp[i-j]; } int ret = dp[n]; delete[] dp; return ret; } };