1class Solution {2public:3int catalan(int n, vector<int> &dp) {4if (n <= 1) return 1;56int ans = 0;7for (int i = 0; i < n; i++) {8ans += catalan(i, dp) * catalan(n - 1 - i, dp);9}1011return ans;12}13int numTrees(int n) {14vector<int> dp(n + 1, -1);1516dp[0] = 1;17dp[1] = 1;1819for (int i = 2; i <= n; i++) {20int ans = 0;21for (int j = 0; j < i; j++) {22ans += dp[j] * dp[i - 1 - j];23}24dp[i] = ans;25}2627return dp[n];2829// return catalan(n,dp);30}31};