class Solution {
public:
    /**
     * 
     * @param n int整型 
     * @return string字符串vector
     */
    vector<string> generateParenthesis(int n) {
        vector<string> res;
        dfs(n, res, "", 0, 0);
        return res;
        // write code here
    }
    void dfs(int n, vector<string>& res, string s, int l, int r){
        if(l<r || l>n || r>n) return;
        if(l==n && r==n){
            res.push_back(s);
            return;
        }
        dfs(n, res, s+'(', l+1, r);
        dfs(n, res, s+')', l, r+1);
        
        
    }
};

DFS+少量的剪枝,剪枝的条件为:左括号的数目一旦小于右括号的数目,以及,左括号的数目和右括号数目均小于n。