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:

[
  "((()))",
  "(()())",
  "(())()",
  "()(())",
  "()()()"
]
Accepted
412,522
Submissions
714,119
 
dfs练手题目, 遍历所有可能的括号组合.
有n对括号, 那么就有n个左括号和n个又括号,由 n和m分别表示, 代码结构和n sum问题类似
class Solution {
public:
    vector<string> generateParenthesis(int n) {
        vector<string> res;
        string s;
        traverse(res, s, n, n);
        return res;
    }
    
    void traverse(vector<string> &res,string &s, int n, int m)
    {
        if(0==n&&0==m)
        {
            res.push_back(s);
            return;
        }
        
        if(n>0)
        {
        s+='(';
        traverse(res,s,n-1,m);
        s.pop_back();
        }
        
        if(m>n)
        {
        s+=')';
        traverse(res,s,n,m-1);
        s.pop_back();
        }
    }
};