lurenaa的博客

🥧递归

  写递归最重要的点在于:
不要在乎递归是如何运行的,你要在乎的是,通过设计什么样的递归公式,递归出口,就一定可以通过递归获得最终的值。而不是去考虑递归在计算机中以什么样的形式和流程去执行的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
class Solution {
public:
vector<TreeNode*> generateTrees(int n) {
if(!n)
return vector<TreeNode*>();
return helper(1, n);
}

vector<TreeNode*> helper(int start, int end) {
vector<TreeNode*> ret;
if(start > end) {
ret.push_back(nullptr);
return ret;
}
for(int i = start; i <= end; ++i)
{
auto leftList = helper(start, i - 1);
auto rightList = helper(i + 1, end);
for(auto l : leftList)
for(auto r: rightList)
{
auto newOne = new TreeNode(i);
newOne->left = l;
newOne->right = r;
ret.push_back(newOne);
}
}
return ret;
}
};

Accepted

9/9 cases passed (12 ms)

Your runtime beats 99.22 % of cpp submissions

Your memory usage beats 8.96 % of cpp submissions (17.6 MB)