解题思路
这道题是参考了别人的思路之后自己再按思路写出来的,主要思路为每次操作当前的字符串可以加左括号也可以加右括号,当左右括号都用完时将当前字符串放入结果数组中,左括号有剩余就可以加,而加右括号的条件不仅需要还有右括号还需要左括号剩余数量少于右括号即已经放置了左括号才能放相应的右括号,整个过程通过递归实现。
代码
class Solution {
public:
void dfs(vector<string>& res,string cur,int left,int right){
if(left == 0 && right == 0)
res.push_back(cur);
if(left > 0)
dfs(res,cur + '(',left - 1,right);
if(right > 0 && left < right)
dfs(res,cur + ')',left,right - 1);
}
vector<string> generateParenthesis(int n) {
vector<string>res;
if(n < 1)
return res;
dfs(res,"",n,n);
return res;
}
};