Leetcode 96. Unique Binary Search Trees 不同的二叉搜索树: 两种思路
2019-06-13 15:51
519 查看
Leetcode 96. Unique Binary Search Trees 不同的二叉搜索树: 两种思路
96. Unique Binary Search Trees 不同的二叉搜索树
题目描述
Given n, how many structurally unique BST’s (binary search trees) that store values 1 … n?
示例:
Example:
Input: 3 Output: 5 Explanation: Given n = 3, there are a total of 5 unique BST's: 1 3 3 2 1 \ / / / \ \ 3 2 1 1 3 2 / / \ \ 2 1 2 3
解答
这道题可以有两种解法,一种是递归,另一种是DP,本质上都是一样的。
给定一个root(for root in n)节点, 假设他的左子树有i - 1各节点,则右子树有n - i 个节点。
则
numTrees=numTrees(i−1)∗numTrees(n−i)其中1<=i<=nnumTrees = numTrees(i-1) * numTrees(n-i) 其中1 <= i <= nnumTrees=numTrees(i−1)∗numTrees(n−i)其中1<=i<=n
也就是
numTrees(n)=numTrees(0)∗numTrees(n−1)+numTrees(1)∗numTrees(n−2)+…+numTrees(n−1)∗numTrees(0)numTrees(n) = numTrees(0) * numTrees(n-1) + numTrees(1) * numTrees(n-2) + … + numTrees(n-1) * numTrees(0)numTrees(n)=numTrees(0)∗numTrees(n−1)+numTrees(1)∗numTrees(n−2)+…+numTrees(n−1)∗numTrees(0)
代码如下
代码
class Solution { public: int numTrees(int n) { if (n == 0 || n == 1) return 1; if(up.find(n) != up.end()) return up[n]; auto res = 0; for (int i = 1; i <= n; i++) { cout << res << '\n'; res += numTrees(i - 1) * numTrees(n - i); } up[n] = res; return res; } private: unordered_map<int, int> up; };
class Solution { public: int numTrees(int n) { vector<int> vec(n + 1,0); vec[0] = 1; vec[1] = 1; for(int i = 2; i <= n; i++) { for(int j = 1; j <= i; j ++) vec[i] = vec[j - 1] * vec[i - j]; } return G[n]; } };
相关文章推荐
- 关于亚瑟夫环的两种不同思路,效率差距很大!
- LeetCode 4. Median of Two Sorted Arrays的两种思路
- leetCode 98.Validate Binary Search Tree (有效二叉搜索树) 解题思路和方法
- leetcode 315. Count of Smaller Numbers After Self 两种思路(欢迎探讨更优解法)
- leetCode 99.Recover Binary Search Tree(修正二叉搜索树) 解题思路和方法
- 漫谈二叉树之递归遍历算法(两种不同的思路)
- Leetcode: Longest Substring with At Most K Distinct Characters && Summary: Window做法两种思路总结
- Reorder List [leetcode] 这两种思路
- LeetCode - 459. Repeated Substring Pattern - O(n)和O(n^2)两种思路 - KMP - (C++) - 解题报告
- 杨辉三角形(pascal triangle)的两种不同思路的C实现方法
- 两种不同BOM搭建思路
- 【Leetcode】96. 不同的二叉搜索树
- Submission Details [leetcode] ---- inplace 线性时间 的两种思路
- leetcode 95. 不同的二叉搜索树 II
- 95. 不同的二叉搜索树 II(来源LeetCode)
- LeetCode 96 Unique Binary Search Trees不同的二叉搜索树的个数
- leetCode 96.Unique Binary Search Trees (唯一二叉搜索树) 解题思路和方法
- 杨辉三角形(pascal triangle)的两种不同思路的C实现方法
- Java 计算器的实现(两种不同思路)
- leetCode 95.Unique Binary Search Trees II (唯一二叉搜索树) 解题思路和方法