数字 n
代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
解法:题目是比较有规律的,我们可以放左括号的前提条件是 左括号数量小于等于右括号,如果左括号大于右括号数量,此时继续搜索下去的都是不合法的方案了。
class Solution {
public:
vector<string>res;
vector<string> generateParenthesis(int n) {
//保持左括号数量一直小于等于右括号即可
dfs("",n,n);
return res;
}
void dfs(string str , int left , int right)
{
if(left<0||left>right)return ;
if(left == 0 && right == 0)
{
res.push_back(str);
return;
}
//搜索放左括号
dfs(str+'(',left -1 ,right);
//搜索放右括号
dfs(str+')',left, right -1);
}
};