22. 括号生成
思路:dfs+剪枝, l,r代表左右括号数量。
class Solution {
public:
vector<string> generateParenthesis(int n) {
vector<string> res;
dfs(res, "", 0, 0, n);
return res;
}
void dfs(vector<string>& res, string str, int l, int r, int& n){
if(l<r || l>n || r>n) return ; //右括号数量大于左括号
if(l==n && r==n) res.push_back(str);
dfs(res, str+"(", l+1, r, n);
dfs(res, str+")", l, r+1, n);
}
};