Crack LeetCode 之 96. Unique Binary Search Trees
阿新 • • 發佈:2018-12-12
https://leetcode.com/problems/unique-binary-search-trees/description/
這道題的本質是求可能的二叉樹的形態總數。任選一個節點做根節點,將左右兩邊可能的二叉樹形態的數目相乘得到一個結果數。按照以上方法遍歷所有的節點並累加結果數即可。可以採用動態規劃的方法,用一個res陣列儲存從0到n個節點對應的結果數。另外,本題也是一個經典的卡特蘭數問題,具體討論參見link。
以下為C++程式碼,時間複雜度為O(n平方),空間複雜度為O(n)。
class Solution { public: int numTrees(int n) { if (n == 0) return 0; vector<int> res; res.push_back(1); res.push_back(1); for (int i = 1; i<n; ++i) { res.push_back(0); for (int j = 0; j<=i; ++j) res[i+1] += res[i-j]*res[j]; } return res[n]; } };