leetcode22-generate parentheses

题目

给定数字n,输出合法的括号组合,结果由n个括号组成
例如:输入为2
输出结果为: “(())”,”()()”

分析

该题目实际上即为考察二叉树,即左分支用于添加”(“,右分支用于添加”)”

python代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class (object):

def generateParenthesis(self, n):
"""
:type n: int
:rtype: List[str]
"""

res = self.dfs([], "", n, n)
return res

def dfs(self, res, tmp, left, right):
if(0==left and 0==right):
res.append(tmp)
return
elif left > 0:
self.dfs(res, tmp + "(", left-1, right)
if right > left:
self.dfs(res, tmp + ")", left, right-1)
return res

C++代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Solution {
public:
vector<string> generateParenthesis(int n) {
if (n == 0) return vector<string>();
vector<string > ret;
dfs(ret, "", n, n);
return ret;
}

void dfs(vector<string> &ret, string tmp, int left, int right)
{

if (0 == left && 0 == right)
{
ret.push_back(tmp);
return;
}
else if (left > 0)
dfs(ret, tmp + '(', left - 1, right);
if (left < right)
dfs(ret, tmp + ')', left, right - 1);
}
};