数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
示例:
输入:n = 3
输出:[
“((()))”,
“(()())”,
“(())()”,
“()(())”,
“()()()”
]
题解:使用回溯法,中间使用剪枝。当)的数量大于(的时候表面这种情况不是我们所需要的
class Solution {
public:
vector<string> generateParenthesis(int n) {
vector<string> res;
int lc = 0, rc = 0;
dfs(res,"",n,lc,rc);
return res;
}
void dfs(vector<string>& res, string path,int n,int lc,int rc){
//rc>lc 剪枝
if(rc>lc || lc>n || rc>n){
return ;
}
if(rc == lc && lc == n){
res.push_back(path);
return ;
}
dfs(res,path+'(',n,lc+1,rc);
dfs(res,path+')',n,lc,rc+1);
}
};