Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.
For example, given n = 3, a solution set is:
[ "((()))", "(()())", "(())()", "()(())", "()()()" ]
class Solution {
public:
vector<string> generateParenthesis(int n) {
vector<string> res;
dfs(res, "", n, n);
return res;
}
void dfs(vector<string>& res, string sub, int left, int right){//一开始把sub写成了引用传递= =不对吖,
if(left<0||right<0||right<left) return;
if(left==0&&right==0){
res.push_back(sub);
return ;
}
if(left>0){
dfs(res, sub+'(', left-1, right);//一开始的写法是这样的——sub+='(';再调用dfs,但是这样的话会导致本次调用中的sub变化,在下一个if语句中会出现问题,果然回溯要非常注意将数据还原成原来的样子啊
}
if(right>left){
dfs(res, sub+')', left, right-1);
}
}
};