Leetcode 22. Generate Parentheses


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:
[
  "((()))",
  "(()())",
  "(())()",
  "()(())",
  "()()()"
]

s考え方:1.backtraking. 各位置で、現在どのくらいの左かっこと右かっこがあるかを記録し、左かっこがn個未満の場合は、左かっこを追加し続けます.もう1つの選択肢は、右かっこの個数がカッコを作るより少ない場合は、右かっこを追加することもできます.注意:以上の2つの場合は、実行を判断する必要があります.2.この問題はどのように数学やプログラム言語で問題をシミュレートしますか.大きなフレームワークはbacktrackingに違いありません.それから2つの変数で左右のカッコの数を統計し、カッコの数によって異なる操作をする必要があります.
//  1:backtracking.    for+backtracking    ,
//          ,    for   ,    backtrakcing
class Solution {
public:

    void helper(vector<string>& res, string cur,int n,int left,int right){
        if(left==n&&right==n){
            res.push_back(cur);
            return; 
        }
        //for(int i=left;i
        //  :     backtracking   for+recursive
        if(left'(',n,left+1,right);
        }
        //for(int i=right;i
        //  :     backtracking   for+recursive
        if(right')',n,left,right+1);
        }
    }

    vector<string> generateParenthesis(int n) {
        //
        vector<string> res;
        helper(res,"",n,0,0);
        return res;
    }
};