1.不同的二叉搜索树
思路一:动态规划
class Solution { public: int numTrees(int n) { vector<int> G(n + 1, 0); G[0] = 1;//无节点 G[1] = 1;//一个节点 for (int i = 2; i <= n; ++i) { for (int j = 1; j <= i; ++j) { G[i] += G[j - 1] * G[i - j];//状态转移方程 } } return G[n]; } };
思路二:数学
class Solution { public: int numTrees(int n) { long long C = 1; for (int i = 0; i < n; ++i) { C = C * 2 * (2 * i + 1) / (i + 2); } return (int)C; } };