Leetcode:96.不同的二叉搜索树&&Leetcode:95.不同的二叉搜索树II
Leetcode:96.不同的二叉搜索树 给定一个整数 n ,求以 1 ... n 为节点组成的二叉搜索树有多少种? 示例: 输入: 3 输出: 5 解释: 给定 n = 3, 一共有 5 种不同结构的二叉搜索树: 1 3 3 2 1 \ / / / \ \ 3 2 1 1 3 2 / / \ \ 2 1 2 3 解题思路: 核心思想:卡特兰数列,动态规划(DP)。 f(n)=f(0)*f(n-1)+f(1)*f(n-2)+f(2)*f(n-3)+......+f(n-1)*f(0); 很显然,如果不用数组保存已经算过的值,就要重复计算多次相同的结果,当n非常大时,重复的量也非常多,难免超时。 C++代码 class Solution { public: int numTrees(int n) { if (n == 0) return 1; if (n == 1) return 1; if (data[n] != 0) return data[n]; int sum = 0; for (int i = 1; i <= n; i++) { sum += numTrees(i - 1)*numTrees(n - i); } data[n] = sum; return sum; } private: vector<int> data = vector<int>(10000, 0); };