题目
给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。
例如,给出 n = 3,生成结果为:
[
“((()))”,
“(()())”,
“(())()”,
“()(())”,
“()()()”
]
解法 回溯法
class Solution {
public:
vector<string> generateParenthesis(int n) {
vector<string> result;
if(n == 0)
return result;
dfs("(",1,n,result);
return result;
}
void dfs(string cur_str, int count, int n, vector<string>& result)
{
if(cur_str.size() == n * 2)
{
if(count == 0)
{
result.push_back(cur_str);
}
return ;
}
if(count < 0) //剪枝
return;
cur_str.push_back('(');
dfs(cur_str ,count + 1, n ,result);
cur_str.pop_back();
cur_str.push_back(')');
dfs(cur_str ,count - 1, n , result);
cur_str.pop_back();
}
};