来个简单点的写法,主要就是考虑什么时候放左右括号的问题

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