LeetCode96.不同的二叉搜尋樹
阿新 • • 發佈:2018-11-21
題目來源:https://leetcode-cn.com/problems/unique-binary-search-trees/description/
題目描述:
就跟斐波那契數列一樣,我們把n = 0 時賦為1,因為空樹也算一種二叉搜尋樹,那麼n = 1時的情況可以看做是其左子樹個數乘以右子樹的個數,左右字數都是空樹,所以1乘1還是1。那麼n = 2時,由於1和2都可以為跟,分別算出來,再把它們加起來即可。n = 2的情況可由下面式子算出:
num[2] = num[0] * num[1](1為根的情況) + num[1] * dp[0](2為根的情況)
同理可寫出 n = 3 的計算方法:
num[3] = num[0] * num[2] (1為根的情況) + num[1] * num[1] (2為根的情況) + num[2] * num[0] (3為根的情況)
由此可以得出卡塔蘭數列的遞推式為:
根據以上分析,該題程式碼如下:
int numTrees(int n) { int num[n+1]; num[0]=1; num[1]=1; for(int i=2;i<=n;i++){ num[i]=0; for(int j=1;j<=i;j++){ num[i]=num[i]+num[i-j]*num[j-1]; } } return num[n]; }